绕圆圈

绕圆圈

题面描述:
小明报名参加了趣味运动会,运动会游戏规则如下:在一个环形跑道上,等距离
放置着 N 个小球,小球按照顺时针方向从起点开始依次编号为 1 到 N,在最短
时间内取走放在跑道上尽可能多小球的选手获胜。举办方要求每个选手只能按照
顺时针方向,跳过 M-1 个号码取后走下一个小球。如当 N=5、 M=3 时,小明能
够取走所有的小球,取走的顺序依次为 1->4->2->5->3。当 N=6、 M=2 时,小明
只能取走 3 个小球 1->3->5。小明想知道在一场比赛中他最多能取走多少小球,
当然,小明是知道怎么做的,但是他忙着补作业,所以这个简单的问题就交(shuai
guo)给你了。
输入数据:
输入数据的第一行为一个整数 T,表示有 T 组测试样例。每组样例为单独的一
行,包括两个整数 N 和 M。
输出数据:
对每一组输入数据,输出一行结果 “Case #id: M”,表示第 id 组数据的结果是 M,
id 从 1 开始。
样例输入:
3
5 3
6 2
10 6
样例输出:
Case #1: 5
Case #2: 3
Case #3: 5
解题思路:
通过例举多个数据,发现结果就是用两个数的最小公倍数除以第二个
代码如下:

#include <iostream>
using namespace std;

int CommenDivisor(int x, int y);
int OneOut(int x, int y);

int main() {
	int nId = 0;                           //存放输入组数
	int m;
	int n;
	int nOut[100] = { 0 };
	int *pInt = nOut;                      //存放输出结果
	cin >> nId;
	for (int i = 0; i < nId; i++)
	{
		cin >> m >> n;
		pInt[i] = OneOut(m, n);
	}
	for (int i = 0; i < nId; i++)
		cout << "Case #"<<(i+1)<<":"<<pInt[i] << endl;
	system("pause");
	return 0;
}
int OneOut(int x, int y) {
	int nOut;
	int nCommenDivisor = CommenDivisor(x, y);
	nOut = (x) / nCommenDivisor;         //最小公倍数为计算公式为 :x*y/最大公约数
	return nOut;                       //求得取球次数
}
int CommenDivisor(int x, int y) {   //求最大公约数
	int z = y;                      //本应该考虑x,y哪个数大,用大数除以小数
	while (x%y != 0)                //余数为零表示为倍数关系,不为零表示互质
	{
		z = x%y;
		x = y;
		y = z;
	}
	return z;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值