每日一练 通货膨胀-x国货币

简介: 每日一练 通货膨胀-x国货币

本次来自CSDN本站的2023年3月16日(期)题目!

题目描述

X国发行货币最高面额为n。 次高面额为n的因子。 以此类推。 X国最多发行多少种货币。

输入描述

输入整数n。(1<=n<=1000000)表示货币的最大面额

输出描述

输出货币的种类

示例:输入10,输出3

题目原图

解题思路

这道题可以用贪心的思路来解决。

首先,可以发现最大面额的货币只有一种,次大面额的货币可以是最大面额的因数,再往下,每种货币面额只能是它上一个面额的因数,所以每个面额只能由上一个面额的因数转移而来。因此,我们从最大面额开始,不断求出当前面额的因数,直到得到面额为1,这样就可以得到所有的货币种类数。

具体地,可以采用一个循环,从最大面额n开始,每次找到当前面额i的最大因数j,然后将i更新为j,继续循环,直到i等于1时结束循环,循环过程中计数器加1即可。

实现时,可以用一个while循环不断找到当前面额的最大因数,可以用i/2的方式加速查找。代码如下:

代码实现

// 请关闭中文输入法,用英文的字母和标点符号。
// 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
// 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
// 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
// 模版代码提供基本的输入输出框架,可按个人代码习惯修改
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int solution(int n){
    int result = 0;
    for (int i = n;i>=1;i--){
        if(n%i == 0) {
            result++;
            n = i;
        }
    }
    // TODO:
    return result;
}
int main() {
    int n;
    std::cin>>n;
    int result = solution(n);
    std::cout<<result<<std::endl;
    return 0;
}

用的是示例模板!采用的C++语言编写!

运行结果

难点和亮点

首先要想到的是,最高面额的货币肯定是必须发行的,因此最多的货币种类数目至少是1。接着,如果最高面额为n,那么次高面额一定是n的因子,次次高面额一定是次高面额的因子,以此类推,直到最低面额为1为止。

因此,我们可以从最高面额n开始,依次找出它的因子,再找出每个因子的因子,直到找到最低面额1为止,这样就可以快速计算出货币种类的数目。在找因子的过程中,可以使用从1到n的循环,判断每个数是否是n的因子来实现。

另外,可以利用一个变量count来记录已经找到的货币种类数目,每找到一个新的货币面额,就将count加1,最终输出count即可。

总之,这道编程题的亮点在于需要巧妙地利用数学知识和循环,快速计算出最多的货币种类数目。


相关文章
|
7月前
|
算法
C国演义 [第九章]
C国演义 [第九章]
C国演义 [第十二章]
C国演义 [第十二章]
|
7月前
|
算法
C国演义 [第十章]
C国演义 [第十章]
|
7月前
|
算法
C国演义 [第八章]
C国演义 [第八章]
C国演义 [第五章]
C国演义 [第五章]
C国演义 [第七章]
C国演义 [第七章]
|
2天前
2022年团体程序设计天梯赛-总决赛
2022年团体程序设计天梯赛-总决赛
8 0
|
7月前
|
算法
C国演义 [第四章]
C国演义 [第四章]
|
7月前
|
存储 算法
C国演义 [第十一章]
C国演义 [第十一章]
[C国演义] 第十三章
[C国演义] 第十三章