程序设计入门3 韩信点兵问题

来源:互联网 发布:php超市会员管理系统 编辑:程序博客网 时间:2024/05/24 05:03
韩信点兵(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, i, j, k, sum, sum_1, sum_2, count = 0, flag;while (scanf("%d%d%d", &a, &b, &c) != EOF){flag = 0;sum = 0;for (i = 0;; i++){sum = 3 * i + a;if (sum > 100){printf("Case %d: No answer\n",++count);break;}if (sum >= 10 && sum <= 100){for (j = 0;; j++){sum_1 = 5 * j + b;if (sum_1 == sum){for (k = 0;; k++){sum_2 = 7 * k + c;if (sum_1 == sum_2){printf("Case %d: %d\n", ++count, sum_2);flag = 1;break;}if (sum_2 > sum_1){break;}}}if (sum_1 > sum){break;}if (flag == 1){break;}}}if (flag == 1){break;}}}return 0;}
二,标准答案

#include<stdio.h>int main(){int a, b, c, i, count = 0;while (scanf("%d%d%d", &a, &b, &c) != EOF){i = 0;for (i = 0;; i++){if (i > 100){printf("Case %d: No answer\n", ++count);break;}if (i%3 == a && i%5 == b && i%7 == c){printf("Case %d: %d\n",++count,i);break;}}}return 0;}

收获体会:

if语句能几个条件并列在一块,就别弄成if嵌套。

原创粉丝点击