題目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位整數)。
輸出說明 :
輸出各獎項中獎張數於一行,獎項依序排列,自特獎開始,每獎項張數間空一空格,最後空一行後輸出總共中獎金額。
範例 :
統一發票號碼共有八位數,每期開出一組特獎和三組頭獎號碼。特獎為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 |
- #include <iostream>
- #include <string.h>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- int main() {
- // 題目28. 統一發票對獎
- string J;//頭獎
- string s1, s2, s3;//特獎
- cin >> J >> s1 >> s2 >> s3;
- int count[7];//數量計算
- fill(count, count+7, 0);
- long int money = 0;//總金額
- int m[6] = {200000, 40000, 10000, 4000, 1000, 200};
- int N;//發票數量
- int c = 0;//中幾碼
- cin >> N;
- int mm = 0;//目前的最高金額
- for(int i = 0;i < N;i++)
- {
- string num;
- cin >> num;
- if(num == J)//中頭獎,其他就不用對了
- {
- money = money + 2000000;
- count[0]++;
- }
- else
- {
- for(int b = 0; b < 3;b++)
- {
- if(b == 0)//對第一個特獎
- {
- for(int j = 7;j >= 0;j--)
- {
- if(s1[j] == num[j])//計算中幾碼
- {
- c++;
- }
- else
- {
- break;
- }
- }
- for(int j = 8;j >= 3;j--)//對幾碼相對應的錢
- {
- if(c == j)
- {
- if(m[8-j] > mm)
- {
- mm = m[8-c];
- }
- }
- }
- c = 0;
- }
- else if(b == 1)//對第二個特獎
- {
- for(int j = 7;j >= 0;j--)
- {
- if(s2[j] == num[j])//計算中幾碼
- {
- c++;
- }
- else
- {
- break;
- }
- }
- for(int j = 8;j >= 3;j--)//對幾碼相對應的錢
- {
- if(c == j)
- {
- if(m[8-c] > mm)
- {
- mm = m[8-c];
- }
- }
- }
- c = 0;
- }
- else if(b == 2)//對第三個特獎
- {
- for(int j = 7;j >= 0;j--)
- {
- if(s3[j] == num[j])//計算中幾碼
- {
- c++;
- }
- else
- {
- break;
- }
- }
- for(int j = 8;j >= 3;j--)//對幾碼相對應的錢
- {
- if(c == j)
- {
- if(m[8-c] > mm)
- {
- mm = m[8-c];
- }
- }
- }
- c = 0;
- }
- }
- for(int j = 0;j < 7;j++)//三個特獎中,最高獎金的數量加一
- {
- if(mm == m[j])
- {
- count[j+1]++;
- }
- }
- money = money + mm;
- mm = 0;
- }
- }
- //輸出
- for(int i = 0;i < 7;i++)
- {
- if(i != 6)
- {
- cout << count[i] << " ";
- }
- else
- {
- cout << count[i] << endl;
- }
- }
- cout << money << endl;
- }
沒有留言:
張貼留言