給定一個整數,輸出這個整數所有的可能加和,按從小到大排序 例:給定整數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 }