C语言实现n个小球放入m个盒子放法统计 - 算法详解与代码示例
#include "stdio.h"\n\n// 计算组合数C(n,m)\nint combination(int n, int m)\n{\n if (m == 0 || m == n) {\n return 1;\n } else {\n return combination(n-1, m-1) + combination(n-1, m);\n }\n}\n\n// 计算n个小球放入m个盒子的放法数\nint countWays(int n, int m)\n{\n // 特殊情况处理\n if (n <= 0 || m <= 0) {\n return 0;\n }\n\n // 当n小于等于m时,放法数为1\n if (n <= m) {\n return 1;\n }\n\n // 当m为1时,放法数为1\n if (m == 1) {\n return 1;\n }\n\n // 当m大于n/2时,计算放入n-m个小球到m个盒子中的放法数\n if (m > n / 2) {\n m = n - m;\n }\n\n // 计算组合数C(n-1, m-1)\n return combination(n-1, m-1);\n}\n\nint main()\n{\n int n, m;\n printf("请输入小球个数n和盒子个数m:");\n scanf("%d%d", &n, &m);\n int ways = countWays(n, m);\n printf("共有%d种放法\n", ways);\n return 0;\n}\n
原文地址: https://www.cveoy.top/t/topic/o72n 著作权归作者所有。请勿转载和采集!