一个正整数拆分成n个数的和,并储存在数组中,C语言代码
时间: 2024-03-09 13:48:26 浏览: 89
以下是使用递归算法实现将正整数N拆分成n个数的和,并将结果储存在数组中的C语言代码示例:
```c
#include <stdio.h>
void partition(int n, int m, int arr[], int index) {
if (n == 0 && m == 0) { // 当n和m都为0时,表示拆分完成
for (int i = 0; i < index; i++) {
printf("%d ", arr[i]); // 输出结果
}
printf("\n");
return;
}
if (n < m || m == 0) { // 不符合拆分规则,直接返回
return;
}
arr[index] = m; // 将当前拆分的数存入数组
partition(n-m, m, arr, index+1); // 递归拆分剩余的数
arr[index] = 0; // 回溯
partition(n, m-1, arr, index); // 递归下一个数
}
int main() {
int N = 5, n = 3;
int arr[100] = {0}; // 定义存储数组
partition(N, n, arr, 0); // 调用递归函数
return 0;
}
```
其中,`partition`函数用于递归实现将正整数N拆分成n个数的和,并将结果存储在数组中。在`main`函数中定义存储数组arr,并调用`partition`函数进行拆分,最终输出结果。这里以N=5,n=3为例,输出结果为:
```
3 1 1
2 2 1
2 1 2
```
即共有3种拆分方案,每种方案的数按从大到小的顺序存储在数组中。
阅读全文