欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法竞赛入门经典 韩信点兵 C解法

程序员文章站 2022-03-14 19:30:20
...

习题2-2 韩信点兵(hanxin)
相传韩信才智过人,从步直接清点自己军队的人数,只让士兵先后以三人一排,五人一排,七人一排变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c< 7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。输入到文件 结束为止。
样例输入:
2 1 6
2 1 3
样例输出:
Case 1: 41
Case 2: No answer

#include<stdio.h>
int main()
{

    int a, b, c, kase = 0, temp, i;
    while(scanf("%d%d%d", &a, &b, &c) != EOF)//读入多组数
    {
        for( i = 10; i  <= 100; i++)
        {
             if((i % 3 == a) && (i % 5 == b) && (i % 7 == c))
              {
                  temp = i;
                  break;//跳出循环
              } 
        }
        if( i > 100 ) printf("Case %d: No answer\n", ++kase);//kase 记组数
        else printf("Case %d: %d\n", ++kase, temp);
    }
    return 0;
}

代码问题

  • 对于 i > 100 算是个挺好的判断, 一开始尝试让遍历无果时,给定赋值-1 再判断输出数 结果没跑出来
  • while(scanf("%d%d%d", &a, &b, &c) !=EOF)读入格式 新人可能会对多组数据处理感到无从下手
  • 暴力求解 听说有中国剩余定理 能应对大数据 在这挖个坑

第一次的Blog 记录蒻鸡学习