C語言,求郵票組合演算法或思路

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

C語言,求郵票組合演算法或思路匿名使用者2022.05.10 回答

定義一個五元素一維陣列,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”);

}

C語言,求郵票組合演算法或思路匿名2008.11.21 回答

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

Top