已知輸入整數14時,運行結果如下,試根據規律編寫程序
#include <stdio.h> int t;//標記i的重復次數 //void divide(int i,int number) //{ //int k,n=number; //while(n>i) //{ // n=n-i; // if((n+i)!=number) // { // for(k=0;number-k>n;k=k+i) // printf("%d+",i); // printf("%d\n",n); // } // else // printf("%d+%d\n",i,n); //} //} void divide(int i,int n) { printf("%d",i); for(int j=0;j<t;j++) { printf("+%d",i); } printf("+%d\n",n-i); if(n-i <= i) { return; } else{ t ++; divide(i,n-i); } } int main() { int n; printf("Input:"); scanf("%d",&n); for(int i=1;i<=n/2;i++) { t = 0; divide(i,n); } return 0; }
已知輸入整數14時,運行結果如下,試根據規律編寫程序
//遞歸 #include <stdio.h> int num(int a,int i,int n) { int j=0,k; if(a<=0) return a; k=num(a-i,i,n+i)+i; for(j=i;j<=n;j=j+i) printf("%d+",i); printf("%d\n",k); return k; } int main() { int number,n; printf("input:"); scanf("%d",&number); for(n=1;n<=number/2;n++) num(number-n,n,n); return 0; } //非遞歸 #include <stdio.h> void divide(int i,int num,int n) { int t,flag = 0;//t:標記最尾的一個數 if(n % i) { t = n % i; flag = 1; } else t = i; while(t < n) { for(int k = 0 ; k < num - 1; k ++) { printf("%d+",i); } if(flag)//不能整除 { printf("%d+%d\n",i,t); } else{ printf("%d\n",t); } t += i; num --; } } int main() { int n; printf("Input:"); scanf("%d",&n); for(int i=1;i<=n/2;i++) divide(i,n/i,n); return 0; }