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

韩信点兵(hanxin)--算法竞赛经典习题2-2:相传韩信才智过人,从不清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,他每次只要掠一眼队伍的排尾就知道总数(C++实现)

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

韩信点兵(hanxin)--算法竞赛经典习题2-2:相传韩信才智过人,从不清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,他每次只要掠一眼队伍的排尾就知道总数(C++实现)

韩信点兵(hanxin)–算法竞赛经典习题2-2:相传韩信才智过人,从不清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,他每次只要掠一眼队伍的排尾就知道总数。
(C++实现)
题:

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

样例输入:

2 1 6
2 1 3

样例输出:

Case1: 41
Case2: No answer

话不多说,先看代码:

#include
#include 

#include 
using namespace std;
int main()
{
	int a, b, c,i,n,k=1;
	do
	{
		n = -1;
		cout << "输入三组数据:" << endl;
		cin >> a >> b >> c;
		for (i = 10; i <= 100; i++)
			if (i % 3 == a && i % 5 == b && i % 7 == c)
			{
				n = i;
				break;
			}
		if (n < 0)
		{
			cout << "无解" << endl;
			k = 0;
		}
		else
			cout << n << endl;
	} while (k == 1);
	return 0;
}

思路解析:
本题主要在于对同一个数做判断处理,它需要符合三个条件,同时整除3、5、7之后还是它符合要求。
另外,复杂的是找到符合要求的,先赋值替换掉,可以直接break。如果找不到该值,终止循环,就进行判断n的情况,没有符合的其实n=-1,无解。符何要求的,输出该值就OK。
另外,重要的是对最后一句画的理解,输入到文件结束时为止,等于是一直符合条件的需要一直输出,最后无解的情况才退出程序,这里再加一个do-while循环,添加一个k值进行判断。
程序运行示例如下所示:

新手驾到,多指教!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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