PTA 7-45 航空公司VIP客戶查詢(map應用)

本題考點:

  • map 的應用

不少航空公司都會提供優惠的會員服務,當某顧客飛行里程累積達到一定數量後,可以使用里程積分直接兌換獎勵機票或獎勵升艙等服務。現給定某航空公司全體會員的飛行記錄,要求實現根據身份證號碼快速查詢會員里程積分的功能。
輸入格式:
輸入首先給出兩個正整數N(≤105)和K(≤500)。其中K是最低里程,即爲照顧乘坐短程航班的會員,航空公司還會將航程低於K公里的航班也按K公里累積。隨後N行,每行給出一條飛行記錄。飛行記錄的輸入格式爲:18位身份證號碼(空格)飛行里程。其中身份證號碼由17位數字加最後一位校驗碼組成,校驗碼的取值範圍爲0~9和x共11個符號;飛行里程單位爲公里,是(0, 15 000]區間內的整數。然後給出一個正整數M(≤105),隨後給出M行查詢人的身份證號碼。
輸出格式:
對每個查詢人,給出其當前的里程累積值。如果該人不是會員,則輸出No Info。每個查詢結果佔一行。

本題是 map 數據結構的應用,只需要掌握好 map 的常用方法即可,仔細,注意輸入最好用 scanfprintf,要比 cin,cout 更快。

完整代碼實現如下:

#include <iostream>
#include <string>
#include <map>

using namespace std;

int N, K;   // 會員數目,最低里程數
map<string, int> members;

int main()
{ 
    scanf("%d%d", &N, &K);
    char number[20];
    string num;
    int dis;
    while (N--)
    {
        scanf("%s%d", number, &dis);
        if(dis > 0)
            dis = max(K, dis); // 至少算作 500
        num = string(number);
        if (members.find(num) == members.end())
            members[num] = dis;
        else
            members[num] += dis;
    }
    int count;
    cin >> count;
    while (count--)
    {
        scanf("%s", number);
        num = string(number);
        if (members.find(num) != members.end())
        {
            printf("%d\n", members[num]);
        }
        else
        {
            printf("No Info\n");
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章