明次 发表于 2010-6-11 14:35

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

vienna 发表于 2010-6-11 15:57

#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开始

楼下继续

lizuolong 发表于 2010-6-11 23:01

lizuolong 发表于 2010-6-11 23:03

orange86630 发表于 2010-6-12 19:27

本帖最后由 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]
查看完整版本: C语言实例 爱因斯坦的数学题