穷举法:
韩信点兵问题:
韩信有一队兵,他想知道人数,便让土兵排队报数
按从1至5报数,最末一个士兵报的数为1
按从1至6报数,最末一个士兵报的数为5
按从1至7报数,最末一个士兵报的数为4:
按从1至11报数,最末一个士兵报的数为10.
你知道韩信至少有多少兵吗?
分析:题目中出现至少出现多少兵,说明满足条件的不止一个;
设兵数为x:需满足:x%5==1; x%6==5; x%7==4; x%11==10;
穷举法:对x等于1开始实验,
#include <stdio.h>
int main()
{
int x;
for(x=1;x<5000;x++)
{
if(x%5==1&&x%6==5&&x%7==4&&x%11==10)
printf("x=%d\n",x);
}
return 0;
}
5000没有特别的依据;如果太小不会有结果;所有有改进的地方;
#include <stdio.h>
int main()
{
int x;
for(x=1; ;x++)
{
if(x%5==1&&x%6==5&&x%7==4&&x%11==10)
printf("x=%d\n",x);
break;
}
return 0;
}
#include <stdio.h>
int main()
{
int x;
for(x=1; ;x++)
{
if(x%5==1&&x%6==5&&x%7==4&&x%11==10)
printf("x=%d\n",x);
goto end;
}
end: ;
return 0;
}
设置一个标志变量 found 来控制这个循环的结束;
#include <stdio.h>
int main()
{
int x;
int found;
for(x=1;found!=1;x++)
{
if(x%5==1&&x%6==5&&x%7==4&&x%11==10)
printf("x=%d\n",x);
found=1;
}
return 0;
}
这样就能在输出一个值后停止输出;但如果需要输出多个值,仍然可以改进。
在添加了found的前提下:
#include <stdio.h>
int main()
{
int x;
int found;
found=0;
for(x=1;found<5;x++)
{
if(x%5==1&&x%6==5&&x%7==4&&x%11==10)
{
printf("x=%d\n",x);
found++;
}
}
return 0;
}
这样就可以输出多个值