-
-
[旧帖]
[原创]爱因斯坦趣味数学题的编程解析(求邀请码)
0.00雪花
-
发表于:
2010-8-15 21:46
1716
-
[旧帖] [原创]爱因斯坦趣味数学题的编程解析(求邀请码)
0.00雪花
一次,爱因斯坦给他的朋友出了这样一道数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?
初一看,题很简单,解此题最直观的算法是:求 除2余1 且 除3于2 且 除5余4 且 除6余5 且 除7余0的数,随可写如下代码:
#include<stdio.h>
int main()
{
int i=1;
while(!((i%2==1)&&(i%3==2)&&(i%5==4)&&(i%6==5)&&(i%7==0)))
++i;
printf("number=%d\n",i);
}
运算结果是“number=119”。
答案符合题目要求,但这个解法却是极其不完善的,因为:
1.不只有一个答案符合题目要求,119只是第一个符合题目的数字;
2.算法效率不高。
以下是我改进后的代码:
#include<stdio.h>
int main()
{
int a=1;
int b=0;
int c;
printf("请输入一个数字,将计算小于此数字的正确值:\n");
scanf("%d",&c); /*答案有无限多个,控制答案的范围大小*/
if(c>=119) /*最小符合条件的值是119,小于此值则跳出操作*/
{
for(;b<c;a++)
{
b=a*10+9; /*根据 “除5余4,除2余1”可推出个位数字一定是九,所以只运算个位是9的数字以提高效率。*/
if((b%3 == 2) && (b%7 == 0) && (b%6 == 5))
{
printf("step = %d \r\n",b);
}
}
}
else printf("此范围内没有符合题目的值,建议输入大于119的值\n");
}
编程菜鸟的帖子,才开始学c语言,希望得到邀请码,绝对原创
运行结果如图:
附源代码:
c.rar
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课