問題描述:
我們郵寄都是貼郵票,在郵局有一些小面值的郵票,通過這些小面值郵票中的一張或幾張的組合,可以滿足不同郵件的不同郵資。現在,郵局有4種不同面值的郵票。在每個信封上最多能貼5張郵票,面值可以相同也可以不同,要求程式設計求出用4種面值所能組成的郵資的最大值。
問題分析:
輸入:4種郵票的面值。
輸出:用這4種面值組成的郵資最大值。
對該問題進行數學分析,不同張數和面值的郵票所組成的郵資可使用下列公式計算:
s=a*i+b*j+c*k+d*l
其中i為a分郵票的張數,j為b分郵票的張數,k為c分郵票的張數,l為d分郵票的張數。
按題目的要求,a,b,c,d分的郵票均可以取0,1,2,3,4,5張,但總共5張。可以採用窮舉方法進行組合,從而求出這些不同面值。不同張數的郵票組合後的郵資
下面是完整的程式:
#include
int main()
int a,b,c,d,i,j,k,l;
static int s[1000];/*郵資*/
scanf("%d%d%d%d,&a&b&c&d");/*輸入四種面值郵票*/
for(i=0;i<=5;i++)/*迴圈變數i用於控制a分面值郵票的張數,最多5張*/
for(j=0;i+j<=5;j++)/*迴圈變數j用於控制b分面值郵票的張數,a分郵票+b分郵票最多5張*/
for(k=0;i+j+k<=5;k++)/*迴圈變數k用於控制c分面值郵票的張數,a分郵票+b分郵票+c分郵票最多5張*/
for(l=0;i+j+k+l<=5;l++)/*迴圈變數l用於控制d分面值郵票的張數,a分郵票+b分郵票+c分郵票+d分郵票最多5張*/
if(a*i+b*j+c*k+d*l)
s[a*i+b*j+c*k+d*l]++;
for(i=1;i<=1000;i++)
if(!s[i])
break;
printf("the max is %d.\n",--i);
return 0;
執行結果:
1 3 5 10
the max is 36.
1045 郵票組合問題
description 某人有四張3分的郵票和三張5分的郵票,用這些郵票中的一張或若干張可以得到多少種不同的郵資?input output 可得到多少種 sample input sample output 19 hint 將問題進行數學分析,不同張數和面值的郵票組成的郵資可用下列公式計算 s 3 ...
藍橋杯試題 剪郵票 C語言
剪郵票 如 圖1.jpg 有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,圖2.jpg 圖3.jpg 中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。思路 先找到5個數的組合,然後從第乙個數字開始遍歷,經過上下左右操作...
C語言求字母的全部組合
使用的遞迴的方法 既然是組合,則順序不要求順序了。主要原理就是從第乙個字元開始,分兩種情況 1.留下此字元 2.去除此字元。再對剩下的字元求組合。然後再第二個字元,分兩種情況,再對剩下的字元求組合 include include include template inline void swap t...