用c语言 编写代码:整数划分问题。任意输入一个整数,输出整数划分的个数及具体的划分。
时间: 2024-09-15 21:13:34 浏览: 59
C语言之整数划分问题(递归法)实例代码
在C语言中,整数划分问题是一个经典的组合数学问题,通常通过动态规划来解决。这里有一个简单的递归解决方案,用于计算整数的所有非负因子对的数量,并打印出每种划分。以下是对应的代码:
```c
#include <stdio.h>
// 函数声明
int countDivisions(int n);
void printPartitions(int n);
// 主函数
int main() {
int num;
printf("请输入一个正整数: ");
scanf("%d", &num);
// 计算并存储划分个数
int divisions = countDivisions(num);
printf("整数 %d 的划分个数为: %d\n", num, divisions);
// 打印所有划分
printPartitions(num);
return 0;
}
// 动态规划函数 - 计算因子对数量
int countDivisions(int n) {
if (n <= 0)
return 0;
else if (n == 1)
return 1;
int count = 0;
for (int i = 1; i * i <= n; i++) { // 只需要考虑i * i <= n的情况
if (n % i == 0) {
count += 1 + countDivisions(n / i); // 1 对因子加上剩余部分的划分
}
}
return count;
}
// 打印所有划分
void printPartitions(int n) {
if (n > 1) {
for (int i = 1; i * i <= n; i++) { // 根据因子对找到所有的划分
if (n % i == 0) {
printf("%d 和 %d 的乘积等于 %d\n", i, n / i, n);
if (n / i != i) // 如果不是自身的平方根,也添加另一种划分
printPartitions(n / i);
}
}
}
}
```
运行此程序时,它会提示用户输入一个正整数,然后显示所有可能的划分及其数量。
阅读全文