• 第二章-在线编程题2-求解幸运数问题


    问题描述:小明同学在学习了不同的进制之后用一些数字做起了游戏。小明同学知道,在日常生活中最常用的是十进制数,而在计算机中二进制数也很常用。现在对于一个数字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。小明同学发现对于一些正整数α满足f(z)=g(z),他把这种数称为幸运数,现在他想知道,小于等于n的幸运数有多少个?

    输入描述:每组数据输入一个数n(n<100 000)。

    输出描述:每组数据输出一行,小于等于n的幸运数个数。

    输入样例: 21

    输出样例:3

    算法思想:这道题我在刚开始做的时候,设计了两个递归函数来分别求各位数与各二进制位数。但仔细思考会发现,求解每一个位数和求解每一个二进制位数,分别是对10取模和对2取模。所以只需要设计一个能取不同模数的递归程序即可实现。

    代码如下:

    #include <iostream>
    using namespace std;
    
    int n;
    int solve(int n, int r)
    {
        int res = 0;
        if (n < r)
            return n;
        return n % r + solve(n / r, r);
    }
    
    int main()
    {
        cin >> n;
        int ans = 0;
        for (int i = 1; i <= n; i++)
            if (solve(i, 10) == solve(i, 2))
                ans++;
        cout << ans << endl;
        return 0;
    }
  • 相关阅读:
    组合数据类型综合练习:1.组合数据类型练习
    Python基础综合练习(五角红旗+字符串练习)
    熟悉常用的Linux操作作业
    大数据概论/作业
    C语言文法
    实验一实验报告
    词法分析程序代码
    jmeter分布式压力测试
    使用badboy配合jmeter测试(详细)
    静态测试,动态测试
  • 原文地址:https://www.cnblogs.com/lzy-deblog/p/13715184.html
Copyright © 2020-2023  润新知