首页
社区
课程
招聘
[旧帖] [原创]爱因斯坦趣味数学题的编程解析(求邀请码) 0.00雪花
发表于: 2010-8-15 21:46 1716

[旧帖] [原创]爱因斯坦趣味数学题的编程解析(求邀请码) 0.00雪花

2010-8-15 21:46
1716
一次,爱因斯坦给他的朋友出了这样一道数学题:有一条长阶梯,若每步跨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直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
韩信点兵~~
2010-8-15 22:17
0
雪    币: 15
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主思考的不错  有代码之美的风格   注重思考  进取
2010-8-15 23:48
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
想法不错!!!
2010-8-16 15:10
0
雪    币: 132
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
想法不错
2010-8-16 17:26
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不错。。。。。。。。。。。。。
2010-8-16 23:36
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看看LZ能不能获得邀请码,如果能,我也发一个
2010-8-17 13:43
0
游客
登录 | 注册 方可回帖
返回
//