AC题解
2026-10-04 20:10:07
发布于:江苏
1阅读
0回复
0点赞
如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, r; // n:小猫数量N, r:每次扔掉的鱼数i
cin >> n >> r;
// 枚举第N只小猫拿走后剩余的鱼数系数k
// 实际剩余鱼数为 k * (n-1),必须是(n-1)的整数倍
for (int k = 1; ; k++) {
int ans = k * (n - 1); // 当前倒推过程中的鱼数,初始为最后剩余
bool flag = true; // 标记当前k是否合法
// 倒推n次:从第N只小猫倒推到第1只小猫
for (int i = 1; i <= n; i++) {
// 关键:倒推公式要求当前ans能被(n-1)整除
// 因为上一步的剩余 = 上一步的每份数量 * (n-1)
if (ans % (n - 1) == 0) {
// 倒推公式:x = ans + ans/(n-1) + r
// 其中ans/(n-1)是上一只小猫分鱼时每份的数量
ans += ans / (n - 1) + r;
} else {
flag = false; // 出现非整数,当前k不合法
break;
}
}
// 若n次倒推均满足整除条件,ans即为所求最小初始鱼数
if (flag) {
cout << ans << endl;
break;
}
}
return 0;
}
这里空空如也








有帮助,赞一个