1 条题解

  • 0
    @ 2025-5-6 20:03:13

    解题思路

    1. 输入处理
      • 持续读取椰子数量 num,直到输入 -1 结束。
    2. 条件判断函数 test
      • 函数接收椰子数 n 和人数 p 作为参数。
      • 模拟分椰子过程:进行 p 轮操作,每轮要求椰子数 n 除以 p 余 1,分完后剩余 (n - 1) / p * (p - 1) 个椰子。
      • 最后检查剩余椰子数能否被 p 整除,若都满足则返回 true,否则返回 false
    3. 寻找合适人数
      • 对于每个输入的椰子数 num,从 num 开始递减尝试不同人数 st,调用 test 函数进行判断。
    4. 输出结果
      • 若找到合适的人数 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
    上传者