C語言下的郵票組合演算法最佳化問題

  • 作者:由 匿名使用者 發表于 收藏
  • 2022-10-27

C語言下的郵票組合演算法最佳化問題只陪她笑i2017.05.07 回答

多層巢狀就是為了解決像排列組合的類似問題,個人認為沒有更簡單的演算法了

求採納

C語言下的郵票組合演算法最佳化問題海之淚2017.05.06 回答

定義一個五元素一維陣列,a[0]=0,輸入其餘四個值,分別是郵票面值。五張郵票所能組成的郵資等於五個變數之和,每一個變數都能在前面定義的一維數組裡相互獨立地取值,這樣透過一個五維的迴圈就能討論所有的情況。為了減少重複討論,可以要求使用者按大小順序輸入郵票面值,程式相應改動,這裡不好說清。

給你一個絕對能用的程式。樓下的不要學我。

#include#include int a[5]={0}; int b[126]; int search(int num) { int i,j=0; for(i=1;i<126;i++) { if(b[i]==num) j++; } return (j); } void main() { for(;!(a[1] { printf(“請按從小到大的順序輸入四種郵票面值:\n”); for(int i=1;i<5;i++) { scanf(“%d”,&a[i]); } } printf(“\n”); int i,j,k,m,n; int t=0; for(i=0;i<=4;i++) { for(j=0;j<=i;j++) { for(k=0;k<=j;k++) { for(m=0;m<=k;m++) { for(n=0;n<=m;n++) { b[t]=a[i]+a[j]+a[k]+a[m]+a[n]; t++; } } } } } k=m=n=0; for(i=a[1];i<=a[4]*5;i++) { if(t=search(i)) { printf(“可以組成郵資%d,有%d種方法\n”,i,t); m++; } else { if(m>k) { k=m; n=i; } m=0; } } if(m==a[4]*5-a[1]+1) printf(“\n可組成郵資的一個最大連續區間為[%d,%d]\n”,a[1],a[4]*5); else printf(“\n可組成郵資的一個最大連續區間為[%d,%d]\n”,n-k,n-1); system (“pause”); }

Top