首页 > 试题广场 >

【例1】韩信点兵问题。韩信有一队兵,他想知道有多少人,便让士

[问答题]

【例1】韩信点兵问题。韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从15报数,最末一个士兵报的数为1;按从16报数,最末一个士兵报的数为5;按从17报数,最末一个士兵报的数为4;最后再按从111报数,最末一个士兵报的数为10。请编程计算韩信至少有多少兵。

【问题求解方法分析】设兵数为x,则按题意x应满足下述关系式:

x%5==1&&x%6==5&&x%7==4&&x%11==10

采用穷举法对x1开始逐个试验,第一个使得上述关系式成立的x值即为所求。

所谓穷举(Exhaustion),简单地说就是通过尝试问题的所有可能来得到最终答案。

#include<stdio.h>
main()
{
int x;
for(x=1;x<3000;x++)
{
if(x%5==1&&x%6==5&&x%7==4&&x%11==10)
{
printf("x=%d\n",x);
}
}
}

程序运行结果如下:

x=2111

1、爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶,若每步跨3册,最后剩下2阶:若每步跨5阶,最后剩下4阶,若每步跨6阶,最后剩下5阶:只有每步跨7阶,最后才正好1阶不剩。参考例1程序,编写计算这条阶梯共有多少阶的程序如下所示,其中存在一些语法和逻辑错误,请找出并改正之。

#include<stdio.h>
main()
{
int x=1,find=0;
while(!find);
{
if(x%2=1&&x%3=2&&x%5=4&&x%6=5&&x%7=0)
{
printf("x=%d\n",x);
find=1;
x++;
}
}
}

推荐
1、

#include<stdio.h>
main()
{
int x=1,find=0;
while(!find)
{
if(x%2==1&&x%3==2&&x%5==4&&x%6==5&&x%7==0)
{
printf("x=%d\n",x);
find=1;
x++;
}
}
}
/* int x,find=0;
for (x=1;!find;x++)
{
if(x%2==1&&x%3==2&&x%5==4&&x%6==5&&x%7==0)
{
printf("x=%d\n",x);
find=1;
}
}
}*/

发表于 2018-03-18 22:31:42 回复(0)
#include <studio>
main()
{
int x =0,find =0;
for(x=1;!find;x++)
{
if(x%2==1&&x%3==2&&x%5==4&&x%6==5&&x%7==0)
{
print("x=%d\n",x)
}
}
}
发表于 2020-11-28 15:48:28 回复(0)