c语言韩信点兵

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言韩信点兵相关的知识,希望对你有一定的参考价值。

c语言韩信点兵每三人一列余二,每五人一列余三,每七人一列余二
要求输入两个数,并且输出两数之间,符合要求的所有数。如果符合条件的数多于10个,每打印10个数换一行
示例输入
1 10000
示例输出

#include "stdio.h"
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语言韩信点兵的主要内容,如果未能解决你的问题,请参考以下文章

C语言韩信点兵(容易超时)

C语言编程:韩信点兵问题拜托各位了 3Q

关于大一的C语言问题,韩信点兵。。

C语言,韩信点兵编程,看看我的错在哪?

c语言编程序:韩信点兵,韩信有一队伍,你想知道有多少人,就让士兵报数,按从1至5报数,最末一个士兵报的

c语言简单程序