题目要求:
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
1 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
一、设计思路
通过列举法,总结函数f(N)规律如下:
1.一位十进制数:当N>=1时,f(N)=1;当N=0时,f(N)= 0;
2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6;
f(23)=个位出现1的个数+十位出现1的个数=3+10=13;
......
f(93)=个位出现1的个数+十位出现1的个数=10+10=20;
3.三位十进制数:f(123)=个位出现1的个数+十位出现1的个数+百位出现1的个数=13+20+24=57;
4.f(abcde),计算c位上的1的个数,需要看ab、c、de的情况:
当c=0时,受高位影响,百位上出现1的个数为:(ab)*100
当c=1时,受高位和低位影响,百位上出现1的个数为:(ab)*100+((cde)+1)
当c>1时,受高位影响,百位上出现1的个数为:((ab)+1)*100
二、程序代码
1 题目要求: 2 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。 3 要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。 4 2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。 5 一、设计思路 6 通过列举法,总结函数f(N)规律如下: 7 1.一位十进制数:当N>=1时,f(N)=1;当N=0时,f(N)= 0; 8 2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6; 9 f(23)=个位出现1的个数+十位出现1的个数=3+10=13; 10 ...... 11 f(93)=个位出现1的个数+十位出现1的个数=10+10=20; 12 3.三位十进制数:f(123)=个位出现1的个数+十位出现1的个数+百位出现1的个数=13+20+24=57; 13 4.f(abcde),计算c位上的1的个数,需要看ab、c、de的情况: 14 当c=0时,受高位影响,百位上出现1的个数为:(ab)*100 15 当c=1时,受高位和低位影响,百位上出现1的个数为:(ab)*100+((cde)+1) 16 当c>1时,受高位影响,百位上出现1的个数为:((ab)+1)*100 17 程序代码 18 运行结果截图 19 总结与心得 20 本次实验的题目是找1的个数,完成时设计思路花费的时间比较长,主要是用于总结规律,对于这种偏于数学应用方面的题目,只要找到规律,那么所有问题都不再困难。这也给我们提示,在我们平时解决问题时,一定要多加思考,这样才能事半功倍。 21
三、运行结果截图
四、总结与心得
本次实验的题目是找1的个数,完成时设计思路花费的时间比较长,主要是用于总结规律,对于这种偏于数学应用方面的题目,只要找到规律,那么所有问题都不再困难。这也给我们提示,在我们平时解决问题时,一定要多加思考,这样才能事半功倍。
时间: 2024-10-17 06:37:46