1 条题解
-
0
C :
#include<stdio.h> /** * 判断椰子数量能否按照规则进行分割 * @param n 人数 * @param total 椰子树 * @param times 分割次数,有几个人就分割几次 * @return 能分割返回1,不能分割返回0 */ int divide(int n, int total, int times) { // 当第n+1次分割时,已经分割完n次了,椰子数满足分割条件返回1,即递归出口 if (times > n) { return 1; } // 椰子可以分割的条件是,当前次可以分割,并且以后的分割都可以进行 // 前次可以分割的条件是,椰子数量total-1后能被分成n份即((total - 1) % n) == 0 // 以后的分割可不可以进行,可以看做是第一个人藏完椰子后,椰子的数量,能否进行分割,即分成更小的问题规模 return !((total - 1) % n) && divide(n, (total - 1) / n * (n - 1), ++times); } int main() { int n; scanf("%d", &n); if (n <=1 || n > 5) { printf("Error!\n"); return 0; } // 暴力枚举,哪个能按照要求分割,哪个就合理。找到第一个就行 int total = n+1; while (1) { if (divide(n, total, 1)) { printf("y=%d\n", total); break; } total++; } }
- 1
信息
- ID
- 116
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者