C趣味程序百例(23)郵票組合

字號:

72.郵票組合
     某人有四張3分的郵票和三張5分的郵票,用這些郵票中的一張或若干張可以得到多少種不同的郵資?
    *問題分析與算法設(shè)計
     將問題進行數(shù)學(xué)分析,不同張數(shù)和面值的郵票組成的郵資可用下列公式計算:
     S=3*i+5*j
     其中i為3分郵柰的張數(shù),j為5分的張數(shù)
     按題目的要求,3分的郵票可以取0、1、2、3、4張,5分的郵票可以取0、1、2、3張。采用窮舉方法進行組合,可以求出這些不同面值不同張數(shù)的郵標組合后的郵資。
    *程序與程序注釋
    #include
    int a[27];
    void main()
    {
     int i,j,k,s,n=0;
     for(i=0;i<=4;i++) /*i:取三分郵票的張數(shù)*/
     for(j=0;j<=3;j++) /*j:取5分郵票的張數(shù)*/
     {
     s=i*3+j*5; /*計算組成的郵票面值*/
     for(k=0;a[k];k++) /*查找是否有相同的郵資*/
     if(s==a[k])break;
     if(!a[k]&&s) /*沒有找到相同的郵資則滿足要求存入數(shù)組*/
     {
     a[k]=s; n++;
     }
     }
     printf("%d kinds:",n); /*輸出結(jié)果*/
     for(k=0;a[k];k++)
     printf("%d ",a[k]);
     printf("\n");
    }
    *運行結(jié)果
     19 kinds: 5 10 15 3 8 13 18 6 11 16 21 9 14 19 24 12 17 22 27