【例1】韩信点兵问题。韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。请编程计算韩信至少有多少兵。
【问题求解方法分析】设兵数为x,则按题意x应满足下述关系式:
x%5==1&&x%6==5&&x%7==4&&x%11==10
采用穷举法对x从1开始逐个试验,第一个使得上述关系式成立的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++; } } }