栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

韩信点兵(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

韩信点兵(C++)

题目:

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

输入包含多组数据,每组数据包含三个非负整数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
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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号