c++算法题 小猫分鱼

题目描述

海滩上有一堆鱼,N 只小猫来分。第一只小猫把这堆鱼平均分为 N 份,多了 i<N 个,这只小猫把多的 i 个扔入海中,拿走了一份。第二只小猫接着把剩下的鱼平均分成 N 份,又多了 i 个,小猫同样把多的 i 个扔入海中,拿走了一份。第三、第四、……,第 N 只小猫仍是最终剩下的鱼分成 N 份,扔掉多了的 i 个,并拿走一份。

编写程序,输入小猫的数量 N 以及每次扔到海里的鱼的数量 i,输出海滩上最少的鱼数,使得每只小猫都可吃到鱼。

例如:两只小猫来分鱼 N=2,每次扔掉鱼的数量为 i=1,为了每只小猫都可吃到鱼,可令第二只小猫需要拿走 1 条鱼,则此时待分配的有 3 条鱼。第一只小猫待分配的鱼有 3×2+1=7 条。

输入格式

总共 2 行。第一行一个整数 N,第二行一个整数 i。

保证 0<N<10;i<N 。

输出格式

一行一个整数,表示满足要求的海滩上最少的鱼数。

输入输出样例

输入 #1

2
1

输出 #1

7

输入 #2

3
1

输出 #2

25
#include <iostream>
using namespace std;

int main() {
	//last是最后一只小猫拿走的鱼数 
	//n是猫数 m是扔掉的鱼数 
	//result用来记录结果 
    int n,m,last=1,result=1;
	cin>>n>>m; 
	for(int i=0;i<n-1;){//如果i=1 只有一只小猫分鱼 固定result=1 
		//最后一只小猫分之前的鱼数
		if(i==0){//初始化result 
			result=last*n+m;	
		} 
		//倒数第二只小猫分之前的鱼数  设x是被分为n份后减去一份还丢m条的结果
		//设y为x被分前的鱼数 (y-m)-(y-m)/n=x  (y-m )((n-1)/n)=x
										//	  y=x/(n-1)*n+m
		//result=result/(n-1)*n+m;//这个式子需要满足x/(n-1)是整数 
		if(result%(n-1)!=0){//如果中间有数不满足 则让last自增并重新开始循环 
			i=0;
			last++; 
		}else{
			//cout<<result<<endl;
			result=result/(n-1)*n+m;
			//cout<<result<<endl;
			i++;
		} 
	}
	cout<<result;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值