藍橋杯“手機尾號”
阿新 • • 發佈:2019-02-17
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
給手機選個好聽又好記的號碼可能是許多人的心願。但號源有限,只能輔以有償選號的方法了。
這個程式的目的就是:根據給定的手機尾號(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
#include<stdio.h> #include<malloc.h> #define SIZE 4 #define TRUE 1 #define FALSE 0 int getConsecutive_Number(char *phone_number,char number){ int temp1=number; int temp=FALSE; int i; for(i=0;i<SIZE;i++){ if(number++==phone_number[i]) temp=TRUE; else{ temp=FALSE; break; } } if(temp) return 5; else{ temp=FALSE; number=temp1; } for(i=0;i<SIZE;i++){ if(number--==phone_number[i]) temp=TRUE; else{ temp=FALSE; break; } } if(temp) return 5; else return 0; } int getPrefix_or_Suffix_number(char *phone_number,char number){ int i,score=0; int temp=FALSE; for(i=0;i<SIZE-1;i++){ if(number==phone_number[i]) temp=TRUE; else{ temp=FALSE; break; } } if(temp) score+=3; number=phone_number[1]; for(i=1;i<SIZE;i++){ if(number==phone_number[i]) temp=TRUE; else{ temp=FALSE; break; } } if(temp) score+=3; return score; } int getAABB_or_ABAB(char *phone_number){ int score=0; int i; if((phone_number[0]==phone_number[1]) && (phone_number[2]==phone_number[3])) score++; if((phone_number[0]==phone_number[2]) && (phone_number[1]==phone_number[3])) score++; return score; } int getSix_Eight_Nine(char *phone_number){ int i,score=0; for(i=0;i<SIZE;i++){ if(phone_number[i]=='6' || phone_number[i]=='8' || phone_number[i]=='9'){ score++; } } return score; } int main(void){ char phone_number[SIZE]; int i=0; int total_grade=0; gets(phone_number); total_grade+=getConsecutive_Number(&phone_number[0],phone_number[0]); total_grade+=getPrefix_or_Suffix_number(&phone_number[0],phone_number[0]); total_grade+=getAABB_or_ABAB(&phone_number[0]); total_grade+=getSix_Eight_Nine(&phone_number[0]); printf("%d",total_grade); return 0; }