1 条题解
-
0
解题思路
- 输入处理:
- 持续读取椰子数量
num
,直到输入-1
结束。
- 持续读取椰子数量
- 条件判断函数
test
:- 函数接收椰子数
n
和人数p
作为参数。 - 模拟分椰子过程:进行
p
轮操作,每轮要求椰子数n
除以p
余 1,分完后剩余(n - 1) / p * (p - 1)
个椰子。 - 最后检查剩余椰子数能否被
p
整除,若都满足则返回true
,否则返回false
。
- 函数接收椰子数
- 寻找合适人数:
- 对于每个输入的椰子数
num
,从num
开始递减尝试不同人数st
,调用test
函数进行判断。
- 对于每个输入的椰子数
- 输出结果:
- 若找到合适的人数
st
,输出椰子数、人数和 1 只猴子的信息。 - 若未找到合适人数(
st
为 0),输出无解信息。
- 若找到合适的人数
#include<iostream> #include<cstring> using namespace std; int num, person; bool test(int n, int p){ for(int i = 0; i < p; i++){ if(n%p!=1) return 0; n = (n-1)/p*(p-1); } return n%p==0; } int main(){ test(25,3); while(cin>>num&&num!=-1){ int st = num; while(st>0&&test(num,st)==0) st--; if(st==0) cout << num << " coconuts, no solution" << endl; else cout << num << " coconuts, " << st << " people and 1 monkey" << endl; } }
- 输入处理:
- 1
信息
- ID
- 310
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者