zoukankan      html  css  js  c++  java
  • HDU4151 The Special Number

    题目链接

     分析:

    本题难点在于看不懂题(英语真的很重要)。

    该题是输出小于n的special number的数量(quantity)。

    暴力+二分。

    AC代码如下:

    #include <stdio.h>
    #include <string.h>
    
    #define MAXN 10000010
    
    int q[MAXN];
    unsigned char hash[11];
    
    int main(){
        int n, i, t, top=0, high, low, mid, pos;
    
        for(i=1; i<=MAXN; i++){
            memset(hash, 0, sizeof(hash));
            t = i;
            while(t){
                if(!hash[t%10]){
                    hash[t%10] = 1;
                    t /= 10;
                }
                else break;
            }
            if(t == 0) q[top++] = i;
        }
    
        while(scanf("%d", &n) == 1){
            if(n<=1){printf("0\n"); continue;}
            high = top; low = 0;
            while(low<high){
                mid = low + (high-low)/2;
                if(q[mid] == n){pos = mid; break;}
                if(q[mid]>n) {high = mid;}
                else{low = mid+1; pos = low;}
            }
            printf("%d\n", pos);
        }
    
        return 0;
    }

     不过有个问题:

    如果将代码改为

    if(q[mid]>n) {high = mid; pos = mid;}
    else low = mid+1;

    会报错,目前不清楚原因。也许是对二分的细节不太了解?回头研究下。

  • 相关阅读:
    编程之美--2.13
    编程之美--2.17
    编程之美--3.8
    编程之美--3.7
    面试金典--9.3
    面试金典--9.2
    面试金典--9.1
    jq插件
    laravel controller
    laravel 登录验证
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2953799.html
Copyright © 2011-2022 走看看