欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

给定一个整数,输出这个整数所有的可能加和,按从小到大排序

程序员文章站 2022-12-21 20:27:33
给定一个整数,输出这个整数所有的可能加和,按从小到大排序 例:给定整数7 输出: 1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+1+5 1+2+4 1+3+3 1+6 2+5 3+4 7 实现一: 1 #include ......

给定一个整数,输出这个整数所有的可能加和,按从小到大排序

例:给定整数7

输出:

1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+4
1+3+3
1+6
2+5
3+4
7
 
实现一:
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <windows.h>
 5 
 6 void myprint(int *arr, int n)
 7 {
 8     int i;
 9     for (i = 0; i< n-1; i++) {
10         printf("%d+", arr[i]);
11     }
12     printf("%d\r\n", arr[n-1]);
13 
14     return;
15 }
16 
17 void test(int n)
18 {
19     int * arr = malloc(sizeof(int) * n);
20     int i;
21     for (i = 0; i< n; i++) {
22         arr[i] = 1;
23     }
24     myprint(arr, n);
25 
26     int middle, sum, first;
27     while (n > 1) {
28         sum = arr[n-1] + arr[n-2];
29         middle = sum / 2;
30 
31         for (first = 2; first<=middle; first++){
32             arr[n-2] = first;
33             arr[n-1] = sum- first;
34             myprint(arr, n);
35         }
36         n--;
37         arr[n-1] = sum;
38         myprint(arr, n);
39     }
40     free(arr);
41 }
42 
43 int main()
44 {
45     int n;
46     while(scanf("%d", &n) != eof) {
47         test(n);
48         printf("-------------------\r\n");
49     }
50     return 0;
51 }