韩信点兵(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<iostream>
#include <cstdlib>

#include <iomanip>
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值进行判断。
程序运行示例如下所示:

请添加图片描述

新手驾到,多指教!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值