【第三屆藍橋杯】手機尾號
阿新 • • 發佈:2019-02-02
題目:手機尾號
30年的改革開放,給中國帶來了翻天覆地的變化。2011全年中國手機產量約為11.72億部。手機已經成為百姓的基本日用品!
給手機選個好聽又好記的號碼可能是許多人的心願。但號源有限,只能輔以有償選號的方法了。
這個程式的目的就是:根據給定的手機尾號(4位),按照一定的規則來打分。其規則如下:
1. 如果出現連號,不管升序還是降序,都加5分。例如:5678,4321都滿足加分標準。
2. 前三個數字相同,或後三個數字相同,都加3分。例如:4888,6665,7777都滿足加分的標準。注意:7777因為滿足這條標準兩次,所以這條規則給它加了6分。
3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合這個模式,所以都被加分。注意:7777因為滿足這條標準兩次,所以這條標準給它加了2分。
4. 含有:6,8,9中任何一個數字,每出現一次加1分。例如4326,6875,9918都符合加分標準。其中,6875被加2分;9918被加3分。
尾號最終得分就是每條標準的加分總和!
要求程式從標準輸入接收資料,在標準輸出上輸出結果。
輸入格式為:第一行是一個整數n(<100),表示下邊有多少輸入行,接下來是n行4位一組的資料,就是等待計算加分的手機尾號。
輸出格式為:n行整數。
例如,輸入:
14
3045
0211
2345
6543
7777
8888
7878
7788
6688
2424
2244
9918
6789
8866
則輸出:
0
0
5
6
8
12
3
3
5
1
1
3
8
5
注意:
請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!
在評卷時使用的輸入資料與試卷中給出的例項資料可能是不同的。
請把所有函式寫在同一個檔案中,除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。
相關的工程檔案不要拷入。
原始碼中不能能使用諸如繪圖、Win32API、中斷呼叫、硬體操作或與作業系統相關的API。
允許使用STL類庫,但不能使用MFC或ATL等非ANSI c++標準的類庫。例如,不能使用CString型別(屬於MFC類庫)。
第三屆藍橋杯部分試題與答案
30年的改革開放,給中國帶來了翻天覆地的變化。2011全年中國手機產量約為11.72億部。手機已經成為百姓的基本日用品!
給手機選個好聽又好記的號碼可能是許多人的心願。但號源有限,只能輔以有償選號的方法了。
這個程式的目的就是:根據給定的手機尾號(4位),按照一定的規則來打分。其規則如下:
1. 如果出現連號,不管升序還是降序,都加5分。例如:5678,4321都滿足加分標準。
2. 前三個數字相同,或後三個數字相同,都加3分。例如:4888,6665,7777都滿足加分的標準。注意:7777因為滿足這條標準兩次,所以這條規則給它加了6分。
3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合這個模式,所以都被加分。注意:7777因為滿足這條標準兩次,所以這條標準給它加了2分。
4. 含有:6,8,9中任何一個數字,每出現一次加1分。例如4326,6875,9918都符合加分標準。其中,6875被加2分;9918被加3分。
尾號最終得分就是每條標準的加分總和!
要求程式從標準輸入接收資料,在標準輸出上輸出結果。
輸入格式為:第一行是一個整數n(<100),表示下邊有多少輸入行,接下來是n行4位一組的資料,就是等待計算加分的手機尾號。
輸出格式為:n行整數。
例如,輸入:
14
3045
0211
2345
6543
7777
8888
7878
7788
6688
2424
2244
9918
6789
8866
則輸出:
0
0
5
6
8
12
3
3
5
1
1
3
8
5
注意:
請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!
在評卷時使用的輸入資料與試卷中給出的例項資料可能是不同的。
請把所有函式寫在同一個檔案中,除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。
相關的工程檔案不要拷入。
原始碼中不能能使用諸如繪圖、Win32API、中斷呼叫、硬體操作或與作業系統相關的API。
允許使用STL類庫,但不能使用MFC或ATL等非ANSI c++標準的類庫。例如,不能使用CString型別(屬於MFC類庫)。
(本題15分)
C++程式碼:
#include <iostream> using namespace std; int addScore(string a) { int add = 0, i, flag = 1; if(a[0] != a[1] && a[0] != a[1] && a[0] != a[2] && a[0] != a[3] && a[1] != a[2] && a[1] != a[3] && a[2] != a[3] && a[0]+a[3] == a[1]+a[2]) add +=5; //如果出現連號,不管升序還是降序,都加5分 if(a[0] == a[1] && a[1] == a[2]) add += 3; //前三個數字相同,加3分 if(a[1] == a[2] && a[2] == a[3]) add += 3; //或後三個數字相同,加3分。 if(a[0] == a[1] && a[2] == a[3]) ++add; //符合AABB模式的加1分 if(a[0] == a[2] && a[1] == a[3]) ++add; //或者ABAB模式的加1分 for(i = 0; i < 4; i++) if(a[i] == '6' || a[i] == '8' || a[i] == '9') ++add; //含有:6,8,9中任何一個數字,每出現一次加1分 return add; //尾號最終得分就是每條標準的加分總和 } int main() { int n, num; string ch; cin >> n; //第一行是一個整數n(<100) while(n--) { //接下來是n行4位一組的資料,就是等待計算加分的手機尾號 cin >> ch; cout << addScore(ch) << endl; //n行整數 } return 0; }
第三屆藍橋杯部分試題與答案