写一段C语言代码。把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
时间: 2024-09-18 08:09:22 浏览: 65
放苹果问题代码
在C语言中,解决这个问题可以使用递归的方式。我们可以定义一个函数`countWays(M, N)`来计算将M个苹果放入N个盘子的不同分法数。由于题目描述了"5,1,1和1,5,1 是同一种分法",我们需要对每个盘子是否为空的情况进行考虑,并排除重复计数。
下面是一个简单的示例代码:
```c
#include <stdio.h>
int countWays(int M, int N) {
// 如果M小于等于0或者N小于0,没有合法的分法
if (M <= 0 || N <= 0)
return 0;
// 如果M刚好等于N,每种盘子都放一个苹果,只有一种分法
if (M == N)
return 1;
// 递归情况:考虑所有可能的分配组合,即把M个苹果放到N-1个非空盘子或者N个盘子中的任意一个
int ways = 0;
ways += countWays(M - 1, N); // 把一个苹果放到任意一个盘子里
ways += countWays(M, N - 1); // 留下一个空盘子
return ways;
}
int main() {
int M = 5; // 想要分的苹果数
int N = 3; // 盘子的数量
int K = countWays(M, N);
printf("共有 %d 种不同的分法。\n", K);
return 0;
}
```
阅读全文