相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。
————————————————
版权声明:本文为CSDN博主「学着改变」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43692144/article/details/84836399
#include<stdio.h>
int main()
{
int a,b,c,m;
printf("请输入三个非负整数a,b,,c(a<3,b<5,c<7):");
scanf("%d%d%d",&a,&b,&c);
for(m=10;m<=100;m++)
{if((m%3==a)&&(m%5==b)&&(m%7==c))
{ printf("士兵的总人数为:%d",m);
break;}//但凡遇到一个满足条件的数字就直接输出,也就是说求的是最小值
if(m==100)
printf("无解!");
}
return 0;
}
还有一个点就是:如果某一个数字不满足第一个if的条件,那么他只是不再执行该if后面的语句,并不会因此跳出for循环,唯一可以控制跳出for循环的只有m<=100这一个条件。
输入1,2,3,输出52;
输入2,4,6,输出无解。
总结break和continue:
for语句中的break与continue
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);
}
return 0; }
输出1234
在这里我总是反应不太过来,如果不清楚的话,就想想continue,是continue的话,当等于5时,程序不会再执行后边的部分,而是直接到了i++,然后再进入判断语句,依次循环。而break就恰恰相反,直接跳出循环,到了return 0了。
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}
return 0; }
所以以上代码输出为1234678910
while语句中的break和continue
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0; }
输出1234
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0; }
输出1234,但其实当i=5的时候程序陷入了死循环。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
i = i+1;
if(i == 5)
continue;
printf("%d ", i);
}
return 0; }
输出结果为:1234678910,当i=5时,不再执行printf,而进入while的判断部分,即5<=10,进入循环执行i=i+1;这时候i已经变成6了,可以输出。
break语句结束循环,而continue就是结束本次循环,还会进行条件判断!