给定一个整数,输出这个整数所有的可能加和,按从小到大排序
程序员文章站
2022-05-18 20:58:04
给定一个整数,输出这个整数所有的可能加和,按从小到大排序 例:给定整数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 }
上一篇: 脚本批量执行Redis命令
下一篇: SQL DROP INDEX 语句