输入包含多组数据,每组数据包含三个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100,。输入到文件结束为止。

题目:

相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼排尾就知道总人数了。

输入包含多组数据,每组数据包含三个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。

已知总人数不小于10,不超过100,。输入到文件结束为止。

样例输入:

2 1 6
2 1 3

样例输出:

Case 1:41
Case 2:No answer

分析:

  1. 军队人数一定,且在10~100
  2. 遍历10~100的数,找出符合题意的最小数
  3. 由题意可以得到以下三个式子

设军队人数为n,
当为三人一排时共有x3列(包含人数不满的那一排)
当为五人一排时共有x5列
当为七人一排时共有x7列
n=3*(x3-1)+a
n=5*(x5-1)+b
n=3*(x7-1)+c

  1. 观察上面三个式子,结合求模运算的特性,可以得到以下三个式子

(n-a)%30
(n-b)%5
0
(n-c)%7==0

  1. 即同时满足以上三个式子的最小数,为所求数

代码:

#include<iostream>
using 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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GT-一二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值