题目描述
海滩上有一堆鱼,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;
}



393

被折叠的 条评论
为什么被折叠?



