1. 程式人生 > >MOOC北京理工《C語言程式設計(上)》第6周第3題:郵票組合

MOOC北京理工《C語言程式設計(上)》第6周第3題:郵票組合

題目內容:

我們寄信都要貼郵票,在郵局有一些小面值的郵票,通過這些小面值郵票中的一張或幾張的組合,可以滿足不同郵件的不同的郵資。
現在,郵局有4種不同面值的郵票。在每個信封上最多能貼5張郵票,面值可相同,可不同。

輸入格式:

四種郵票的面值。

輸出格式:

用這四種面值組成的郵資最大的從1開始的一個連續的區間。

說明:
如結果為10,則表明使用4張郵票可組合出1、2、3、4、5、6、7、8、9、10這些郵資。

名詞解釋:
郵資:就是你寄東西需要花多少錢。
郵票面額:是由國家發行的具有固定價格的花紙片,被稱為郵票。

如果你寄東西,郵局稱了重量,告訴你要240分。這樣你就要貼郵票了。如果現在郵局的郵票有面值為80分、50分、20分和10分的四種,你就可以採用不同的組合得到240的郵資,例如:採用3張80分的可以湊出240分;或者24張10分的湊起來240分也可以。顯然不同郵票的組合都可以得到同樣一種郵資。

輸入樣例:

1 4 12 21

輸出樣例:

The max is 71.
#include<stdio.h>
int main()
{
    int i, j, k, p, a1, a2, a3, a4, m=1, flag;
    scanf("%d%d%d%d",&a1,&a2,&a3,&a4);
    A: for( i = 0 ; i <= 5 ; i++ )
    { 
        for( j = 0 ; j <= 5 - i ; j++ ) 
        { 
            for( k = 0 ; k <= 5 - i - j ; k++ ) 
            { 
                for( p = 0 ; p <= 5 - i - j - k ; p++ ) 
                { 
                    flag = 1 ; 
                    if( a1 * p + a2 * k + a3 * j + a4 * i == m )
                    { 
                        flag = 0; 
                        m++; 
                        goto A; 
                    } 
                } 
            } 
        } 
    } 
    if( flag == 1 ) printf("The max is %d.\n",m-1);
    return 0;
}