c语言韩信点兵
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言韩信点兵相关的知识,希望对你有一定的参考价值。
c语言韩信点兵每三人一列余二,每五人一列余三,每七人一列余二
要求输入两个数,并且输出两数之间,符合要求的所有数。如果符合条件的数多于10个,每打印10个数换一行
示例输入
1 10000
示例输出
void main()
int num1,num2;
int i,count=0;
printf("请输出两个整数:");
scanf("%d%d",&num1,&num2);
for(i=num1;i<=num2;i++)
if(i%3==2 && i%5==3 && i%7==2)
{
printf("%8d",i);
count++;
if(count%10==0)
printf("\\n");
}
帮你手打了一下,你自己测试与调试一下
追问你帮我看看我的哪里错了啊,输出跟问题上的对不上啊
你的换行语句换到后面去
追问不行啊,你在写一段吧,感激不尽T.T
追答你的scanf中间写了逗号,输入两个整数之间也要逗号。
参考技术A #include <stdio.h>void f(int min, int max, int length)
int i = min;
int c = 0;
for (i = min; i <= max; i++)
if (i % 3 == 2 && i % 5 == 3 && i % 7 == 2)
c++;
printf("%7d", i);
if (c == length)
printf("\\n");
c = 0;
int main()
int min;
int max;
scanf("%d %d", &min, &max);
f(min, max, 10);
参考技术B 在你的程序段中,break的意思是跳出for循环,也就是说,
第一次进入循环时,x=10,此时不满足if的条件,不执行if大括号里的语句,执行else大括号里的语句,即输出No answer,换行,然后break,跳出for循环,程序结束。
然而如果把把两个break注释掉,else中的语句仍然,放在for循环内部,会得到很多No answer,再输出一个41,然后又是很多No answer。(你可以验证一下)
这是因为每次进入for循环,无论是执行if中的语句还是else中的语句,它都必然会执行输出,前面不满足条件的x都进入了else,接着输出No answer。
所以,原来程序段中的else中的语句不应该放在for循环内部。
换句话说,你的改进应该是(1)删掉两个break,(2)将else中的语句(即输出No answer)放到for循环以外
改进结果如下:
#include
int main()
int a,b,c,x;
scanf("%d%d%d",&a,&b,&c);
for(x=10;x<=100;x++)
if((x%3==a)*(x%5==b)*(x%7==c))
printf("%d\n",x);
break;
if(x==101)
printf("no answer");
return 0;
因为我没设置hanxin.out这个文件,所以把freopen("hanxin.out","w",stdout);这行删除了,你需要的话可以自己加上。
为了将 printf("no answer");这一句放到for循环以外,增加了两句
break;
和
if(x==101)
这两句的作用是当x满足for中if的条件时,跳出for循环,此时x的值为跳出时的值,如果所有的x都不满足for中if的条件,则此时for执行完毕,没有x满足条件,此时x的值为101,就输出no answer。
还有问题尽管问哈~ 参考技术C # include<stdio.h>
int main()
int n,a,b,c;
scanf("%d%d%d",&a,&b,&c);
for(n=10;n<=200;n++)
if (n%3==a && n%5==b && n%7==c)
if(n<=100)
printf("%d",n);
break;
else
printf("No answer");
韩信点兵
韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次都只是掠一眼队伍的排位就知道人数了。输入包含多组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。
样例输入: 2 1 6
样例输出: 41
样例输入: 2 1 4
样例输出: No Answer
程序分析:
1、输入包含多组数据。while(scanf("%d%d%d",&a,&b,&c)!=EOF)
2、已知总人数不小于10,不超过100。for(i=10;i<=100;i++)
3、每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7。if((i-a)%3==0&&(i-b)%5==0&&(i-c)%7==0)
#include<stdio.h> int main() { int a,b,c; int i,t=1; freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); while(scanf("%d%d%d",&a,&b,&c)!=EOF) { for(i=10;i<=100;i++) { if((i-a)%3==0&&(i-b)%5==0&&(i-c)%7==0) { printf("Case %d: %d\n",t,i); t++; break; } } if(i>100) { printf("Case %d: No answer\n",t++); t++; } } return 0; }
以上是关于c语言韩信点兵的主要内容,如果未能解决你的问题,请参考以下文章