“韩信点兵”是源于淮安民间传说着一则故事,常与多多益善搭配。寓意越多越好。
问题如下:
首先分析其问题,
按从1至5报数,最末一个士兵报的数为1,说明士兵人数比五的倍数多一个,即5n+1;
按从1至6报数,最末一个士兵报的数为5,说明士兵人数比六的倍数多五个,即6n+5;
按从1至7报数,最末一个士兵报的数为4,说明士兵人数比七的倍数多四个,即7n+4;
最后再按从1至11报数,最末一个士兵报的数为10,说明士兵人数比十一的倍数多十个,即11n+10。
这个问题用到了循环,出于个人习惯,这里以 for循环 为大家解答,源代码如下:
for 循环
#include <stdio.h>
int main(){
int sum;
for(sum=1;;sum++){
if(sum%5==1&&sum%6==5&&sum%7==4&&sum%11==10){
printf("%d",sum);
break;
}
}
return 0;
}
定义的 sum 用于计算人数在循环语句,没有设置结束条件,所以将其放置循环内部,配合上 分支 if 和 break 来结束这个循环.
当满足分支内的条件时,将结果输出,执行 break 结束循环
根据题意将 分支 内部写成
sum%5==1 && sum%6==5 && sum%7==4 && sum%11==10
其中用逻辑运算符 && 将每个算式连接,当 sum 的值满足其中的每个算式时才能执行分支内的语句
在分支内部使用 printf 输出函数 将 sum 的值输出也可以将其写在循环外面,如:
#include <stdio.h>
int main() {
int sum;
for(sum=1;; sum++) {
if(sum%5==1&&sum%6==5&&sum%7==4&&sum%11==10)
break;
}
printf("%d",sum);
return 0;
}
此时的 分支if 只是管到 break ,作用是结束循环。
最后 return ,代码结束。
其余循环放于下方,需者自取:
while 循环
#include <stdio.h>
int main() {
int sum=1;
while (sum){
sum++;
if(sum%5==1&&sum%6==5&&sum%7==4&&sum%11==10)
break;
}
printf("%d",sum);
return 0;
}
do...while 循环
#include <stdio.h>
int main() {
int sum=1;
do{
sum++;
}while (!(sum%5==1&&sum%6==5&&sum%7==4&&sum%11==10));
printf("%d",sum);
return 0;
}
如果还有其他解法,欢迎大家留言!