韩信点兵

#include <stdio.h>
#include <math.h>
// 算法竞赛的目标是编程对任意输入均得到正确的结果。
// 请先独立完成,如果有困难可以翻阅本书代码仓库中的答案,但一定要再次独立完成。
// “抓住主要矛盾”——始终把学习、实验的焦点集中在最有趣的部分。如果直观地解决方案行得通,就不必追究其背后的原理。

/**
【题目】韩信点兵(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
*/


/**
【分析】定义总数n,循环处理,n>=10,n<100。只要有第一个值,就输出。
*/


int main()
{
    int n;
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);

    for (n=10;n<100;n++) {
        if ((n%3==a) && (n%5==b) && (n%7==c)) {
            printf("%d
",n);
            break; // 跳出当前最近的循环,对你这个例子来说就是跳出for
        }
    }

    if (n==100) {
        printf("No answer
");
    }

    return 0;
}


点评:有时候思路很重要,思路来了,代码就快了。用计算机的思维去解决问题,不是韩信的思维。

增加多组数据处理。

#include <stdio.h>
#include <math.h>
// 算法竞赛的目标是编程对任意输入均得到正确的结果。
// 请先独立完成,如果有困难可以翻阅本书代码仓库中的答案,但一定要再次独立完成。
// “抓住主要矛盾”——始终把学习、实验的焦点集中在最有趣的部分。如果直观地解决方案行得通,就不必追究其背后的原理。

/**
【题目】韩信点兵(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
*/


/**
【分析】定义总数n,循环处理,n>=10,n<100。只要有第一个值,就输出。
*/

int main()
{
    int n;
    int a,b,c;

    while (scanf("%d%d%d",&a,&b,&c) != EOF) { // 多组数据输入处理,Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。
        for (n=10;n<100;n++) {
            if ((n%3==a) && (n%5==b) && (n%7==c)) {
                printf("%d
",n);
                break; // 跳出当前最近的循环,对你这个例子来说就是跳出for
            }
        }

        if (n==100) {
            printf("No answer
");
        }
    }

    return 0;
}


原文地址:https://www.cnblogs.com/jiqing9006/p/8533519.html