回覆列表
-
1 # 啊啊啊啊哦JJ
-
2 # 手機使用者86515297641
一般這種題是沒有好方法算的。唯一的方法就是加法。。先隨機的抽出一組數字相加。。然後和K進行比較。。看看大小是多少。。如果太大,那麼大多少。就應該知道,如果太小那麼小多少也應該知道。然後用其餘的數字作一下觀察。。當然就可以了。用電腦來算的話,就應該用排列組合方式,,也就是說,第一次和所有的數字比較。。得到一種方式,第第二次和所有排列的兩個數比較。。第三次和所有排列的三個數字比較。一直下去直到比較完成如果你想要程式。我也有。。程式是輸入N個數字,然後再輸入K最後就得到答案了。。答案就是你要的M個數字。
轉自他人,供參考:#include<stdio.h> #define MAXN 11 void pro(int n,int m) { char c[MAXN],b[4],c1[MAXN],*p; int i,j,k,t,sum,ct=0; if (m==n) { for(i=0; i<n; i++) printf("1"); printf("\n"); printf("total=1\n"); return ; } if(m==1) { printf("%d\n",n); printf("total=1\n"); return ; } k=n-m; for(i=0; i<m; i++) c[i]=k+"0"; c[i]="\0"; t=strtol(c,&p,k+1); sprintf(b,"%%%ds",m); for(i=0; i<t; i++) { itoa(i,c,k+1); sprintf(c1,b,c); sum=0; for(j=0; j<m; j++) { if (c1[j]==" ") { c1[j]="1"; sum+=1; } else { c1[j]+=1; sum+=c1[j]-"0"; } } if (sum==n) { printf("%s\n",c1); ct++; } } printf("total=%d\n",ct); } int main() { pro(8,6); return 0; }