美文网首页
笔试刷题-京东2018-07-25

笔试刷题-京东2018-07-25

作者: Dodo159753 | 来源:发表于2018-07-25 07:40 被阅读0次

    题目描述:

    /**
    小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。
    小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,
    二进制数也很常用。
    现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)。
     f(x)表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6。
      g(x)表示把x这个数用二进制写出后各个数位上的数字之和。如123的二进制表示为1111011,
      那么,g(123)=1+1+1+1+0+1+1=6。
      小明同学发现对于一些正整数x满足f(x)=g(x),他把这种数称为幸运数,
    现在他想知道,小于等于n的幸运数有多少个?
    输入描述:
    每组数据输入一个数n(n<=100000)
    输出描述:
    每组数据输出一行,小于等于n的幸运数个数。
    输入例子1:
    21
    输出例子1:
    3
    */
    
    

    思路如下:

    直接判断n以内每个数即可
    O(nlogn)

    代码如下:

    #include<stdio.h>
    #include<iostream>
     
    #define BASE1 10
    #define BASE2 2
     
    using namespace std;
     
    int f(int n, int base){
        int sum = 0;
        while(n){
            sum += (n%base);
            n /= base;
        }
        return sum;
    }
     
    int main(){
        int N, total=0;
        scanf("%d", &N);
        for(int n=1; n<=N; n++){
            if(f(n, BASE1)==f(n, BASE2))
                total++;
        }
        printf("%d", total);
        return 0;
    }
     
    
    

    相关文章

      网友评论

          本文标题:笔试刷题-京东2018-07-25

          本文链接:https://www.haomeiwen.com/subject/ftvumftx.html