C语言实例 爱因斯坦的数学题
爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?*问题分析与算法设计
根据题意,阶梯数满足下面一组同余式:
x≡1 (mod2)
x≡2 (mod3)
x≡4 (mod5)
x≡5 (mod6)
x≡0 (mod7)
*程序说明与注释
#include<stdio.h>
int main()
{
int i=1; /*i为所设的阶梯数*/
while(!((i%2==1)&&(i%3==2)&&(i%5==4)&&(i%6==5)&&(i%7==0)))
++i; /*满足一组同余式的判别*/
printf("Staris_number=%d\n",i);
}
*运行结果
Staris_number=119 #include <stdio.h>
int main() {
int i = 7;
int count = 7;
int result = 0;
for (;;) {
if ((result%3 == 2) && (result%5 == 4) && (result%6 == 5)) {
printf("result = %d \r\n",result);
break;
} else {
count += 2;
result = i * count;
}
}
return 0;
}
只循环7的倍数,7的双数倍数如 7*2 、 7*4 、 7*6······都不用
那只需循环7的单数倍数,然后题上7*3,7*5都不行,,
循环由7*7开始
楼下继续 本帖最后由 orange86630 于 2010-6-12 19:42 编辑
3楼说的对,算出来的都是最小的满足条件的值,我修改了一下。
用E语言写的代码:
.版本 2
.程序集 窗口程序集1
.子程序 _按钮1_被单击
.局部变量 a, 整数型
.局部变量 b, 整数型
编辑框2.内容 = “”
.判断循环首 (b < 到数值 (编辑框1.内容))
b = a × 10 + 9
a = a + 1
.如果真 (b % 3 = 2 且 b % 7 = 0 且 b % 6 = 5)
编辑框2.加入文本 (到文本 (b) + #换行符)
.如果真结束
.判断循环尾 ()
.如果 (编辑框2.内容 = “”)
编辑框2.内容 = “该数值范围内没有满足条件的值”
.否则
.如果结束
源代码:
主要原理:根据 “除5余4,除2余1”可推出个位数字一定是九,所以只运算个位是9的数字。
页:
[1]