题目:
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼排尾就知道总人数了。
输入包含多组数据,每组数据包含三个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。
已知总人数不小于10,不超过100,。输入到文件结束为止。
样例输入:
2 1 6
2 1 3
样例输出:
Case 1:41
Case 2:No answer
分析:
- 军队人数一定,且在10~100
- 遍历10~100的数,找出符合题意的最小数
- 由题意可以得到以下三个式子
设军队人数为n,
当为三人一排时共有x3列(包含人数不满的那一排)
当为五人一排时共有x5列
当为七人一排时共有x7列
n=3*(x3-1)+a
n=5*(x5-1)+b
n=3*(x7-1)+c
- 观察上面三个式子,结合求模运算的特性,可以得到以下三个式子
(n-a)%30
(n-b)%50
(n-c)%7==0
- 即同时满足以上三个式子的最小数,为所求数
代码:
#includeusing namespace std; int main() { int y3 = 0, y5 = 0, y7 = 0; cin >> y3 >> y5 >> y7; bool T = false;//用于判断是否找到所求数 for (int i = 10; i < 100; i++) { if ((i - y3) % 3 == 0 && (i - y5) % 5 == 0 && (i - y7) % 7 == 0) { //找到的第一个符合条件的数,就是最小数。 cout << i << endl; T = false; //退出循环 break; } else T = true; } if (T) cout << "No answer" << endl; return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)