2017年12月8日 星期五

[ITSA Basic]題目28. 統一發票對獎(C++)

題目28. 統一發票對獎

問題描述 :
統一發票號碼共有八位數,每期開出一組特獎和三組頭獎號碼。特獎為8 位數號碼與特獎號碼相同者,獎金 200 萬元;頭獎為8 位數號碼與頭獎號碼相同者,獎金 20 萬元;二獎為末 7 位數號碼與頭獎中獎號碼末 7 位相同者,各得獎金 4 萬元;三獎為末 6 位數號碼與頭獎中獎號碼末 6 位相同者,各得獎金 1 萬元;四獎為末 5 位數號碼與頭獎中獎號碼末 5 位相同者,各得獎金 4 千元;五獎為末 4 位數號碼與頭獎中獎號碼末 4 位相同者各得獎金 1 千元;六獎為末 3 位數號碼與頭獎中獎號碼末 3 位相同者各得獎金 2 百元。假設所有獎項均以中獎金額較大的優先,請寫一模擬對獎程式,讀入開獎號碼及統一發票號碼,印出中獎種類及張數,以及中獎總金額。

輸入說明 :
第一行為一8位整數表示特獎開獎號碼,接下來有三行,每行為一8位整數代表頭獎開獎號碼,第五行為一正整數N( 1 ≤ N ≤ 100000 ),代表共有N張發票要對獎,之後有N行,每行為一張發票號碼(8位整數)。
輸出說明 :
輸出各獎項中獎張數於一行,獎項依序排列,自特獎開始,每獎項張數間空一空格,最後空一行後輸出總共中獎金額。
範例 :

Sample Input:Sample Output:
14672884
79807980
85312452
94251069
3
79807980
84556452
15661069
0 1 0 0 0 1 1
201200





  1. #include <iostream>  
  2. #include <string.h>    
  3. #include <cmath>    
  4. #include <algorithm>  
  5. using namespace std;  
  6.   
  7. int main() {  
  8.     // 題目28. 統一發票對獎  
  9.     string J;//頭獎  
  10.     string s1, s2, s3;//特獎  
  11.     cin >> J >> s1 >> s2 >> s3;  
  12.     int count[7];//數量計算  
  13.     fill(count, count+7, 0);  
  14.     long int money = 0;//總金額  
  15.     int m[6] = {200000, 40000, 10000, 4000, 1000, 200};  
  16.     int N;//發票數量  
  17.     int c = 0;//中幾碼  
  18.     cin >> N;  
  19.     int mm = 0;//目前的最高金額  
  20.     for(int i = 0;i < N;i++)  
  21.     {  
  22.         string num;  
  23.         cin >> num;  
  24.         if(num == J)//中頭獎,其他就不用對了  
  25.         {  
  26.             money = money + 2000000;  
  27.             count[0]++;  
  28.         }  
  29.         else  
  30.         {  
  31.             for(int b = 0; b < 3;b++)  
  32.             {  
  33.                 if(b == 0)//對第一個特獎  
  34.                 {  
  35.                     for(int j = 7;j >= 0;j--)  
  36.                     {  
  37.                         if(s1[j] == num[j])//計算中幾碼  
  38.                         {  
  39.                             c++;  
  40.                         }  
  41.                         else  
  42.                         {  
  43.                             break;  
  44.                         }  
  45.                     }  
  46.                     for(int j = 8;j >= 3;j--)//對幾碼相對應的錢  
  47.                     {  
  48.                         if(c == j)  
  49.                         {  
  50.                             if(m[8-j] > mm)  
  51.                             {  
  52.                                 mm = m[8-c];  
  53.                             }  
  54.                         }  
  55.                     }  
  56.                     c = 0;  
  57.                 }  
  58.                 else if(b == 1)//對第二個特獎  
  59.                 {  
  60.                     for(int j = 7;j >= 0;j--)  
  61.                     {  
  62.                         if(s2[j] == num[j])//計算中幾碼  
  63.                         {  
  64.                             c++;  
  65.                         }  
  66.                         else  
  67.                         {  
  68.                             break;  
  69.                         }  
  70.                     }  
  71.                     for(int j = 8;j >= 3;j--)//對幾碼相對應的錢  
  72.                     {  
  73.                         if(c == j)  
  74.                         {  
  75.                             if(m[8-c] > mm)  
  76.                             {  
  77.                                 mm = m[8-c];  
  78.                             }  
  79.                         }  
  80.                     }  
  81.                     c = 0;  
  82.                 }  
  83.                 else if(b == 2)//對第三個特獎  
  84.                 {  
  85.                     for(int j = 7;j >= 0;j--)  
  86.                     {  
  87.                         if(s3[j] == num[j])//計算中幾碼  
  88.                         {  
  89.                             c++;  
  90.                         }  
  91.                         else  
  92.                         {  
  93.                             break;  
  94.                         }  
  95.                     }  
  96.                     for(int j = 8;j >= 3;j--)//對幾碼相對應的錢  
  97.                     {  
  98.                         if(c == j)  
  99.                         {  
  100.                             if(m[8-c] > mm)  
  101.                             {  
  102.                                 mm = m[8-c];  
  103.                             }  
  104.                         }  
  105.                     }  
  106.                     c = 0;  
  107.                 }  
  108.             }  
  109.             for(int j = 0;j < 7;j++)//三個特獎中,最高獎金的數量加一  
  110.             {  
  111.                 if(mm == m[j])  
  112.                 {  
  113.                     count[j+1]++;  
  114.                 }  
  115.             }  
  116.             money = money + mm;   
  117.             mm = 0;  
  118.         }  
  119.     }  
  120.     //輸出  
  121.     for(int i = 0;i < 7;i++)  
  122.     {  
  123.         if(i != 6)  
  124.         {  
  125.             cout << count[i] << " ";  
  126.         }  
  127.         else  
  128.         {  
  129.             cout << count[i] << endl;  
  130.         }  
  131.     }  
  132.     cout << money << endl;  
  133. }  

沒有留言:

張貼留言