You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# include <bits/stdc++.h>
using namespace std ;
/*
解析:这段代码通过枚举海滩上的鱼的数量,并对每个数进行判断是否满足题目要求,最终输出最少的鱼的数量。
初始海滩上的鱼的数量为 k * N +
i, 其中k为枚举的数, 因为第一只小猫已经拿走了一份, 所以要加上 i。
对于每只小猫,如果当前剩余鱼的数量不能被 N-1
个小猫平均分配,说明这个数不可行,退出循环,枚举下一个数。
如果当前的鱼的数量可以被 N-1
个小猫平均分配,则继续计算下一只小猫拿走一份后的剩余鱼的数量。
如果所有小猫的剩余鱼的数量都可以被平均分配,则输出最后一个鱼的数量,即海滩上最少的鱼的数量,
使得每只小猫都能吃到鱼。
*/
int n , i , s ; // 定义小猫的数量 N, 每次扔到海里的鱼的数量 i, 和海滩上的鱼数量 s
bool f ; // 定义标记变量用于判断每个数是否可行
int main ( ) {
cin > > n > > i ; // 输入小猫的数量 N 以及每次扔到海里的鱼的数量 i
for ( long long k = 1 ; 1 ; k + + ) { // 从 1 开始枚举海滩上的鱼数量
f = true ; // 每个数都默认可行
s = k * n +
i ; // 由于第一只小猫已经取走了一份,因此初始鱼的数量为 k * n + i
for ( int j = 1 ; j < = n - 1 ; j + + ) // 处理每只小猫
{
if ( s % ( n - 1 ) ! =
0 ) // 如果当前的鱼的数量除以 N-1 余数不为 0, 则说明无法平均分配
{
f = false ; // 当前的鱼的数量不可行
break ; // 退出循环
}
s = s * n / ( n - 1 ) +
i ; // 计算已拿走一份的剩余鱼数,每只小猫拿走一份
}
if ( f ) break ; // 如果当前的鱼的数量可行,则退出循环
}
cout < < s < < endl ; // 输出最少的鱼数,使得每只小猫都能吃到鱼
return 0 ;
}