先给出题目:
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人
一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组
数据,每组数据包含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, kcase = 0;
while (~scanf("%d%d%d", &a, &b, &c))
{
for (i = 10; i <= 100; i++)
{
if (i % 3 == a && i % 5 == b && i % 7 == c)
{
kcase++;
int res = i;
printf("case %d:%d\n", kcase, res);
break;
}
}
if (i > 100)
{
kcase++;
printf("Case %d:No answer\n", kcase);
}
}
return 0;
}
因为初学此类算法,总是有几个遗漏,或者应该记住的点:
第一:用户输入需用到while循环,且循环的条件为scanf的返回值,这里scanf的返回值是输入值的个数,如果没有输入输入值就返回-1,”~“时候按位取反,-1按位取反的结果就是0,下面代码的意思就是当用户没有输入就不进入循环。
while (~scanf("%d%d%d", &a, &b, &c))
第二:运用kcase计数器,韩信点兵的样例输出里面有case 1,2,3....,所以就需要运用到case计数器。
第三:代码的内容要尽可能完善,我发现自己写代码就是有问题,Bug百出,总是需要运行的时候不是想要的结果,才会返回来仔细看代码发现bug解决,这个估计需要长期经验的积累吧。
下面放上参考其他文章之后写出的代码,请各位大佬多多指教。