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
1 #include<stdio.h> 2 #include<string.h> 3 #define MAX 100 4 //是否连号 5 int isLianHao(char *a) 6 { 7 char c=a[0]; 8 char sheng[5]={c,c+1,c+2,c+3,0}; 9 char jiang[5]={c,c-1,c-2,c-3,0}; 10 if(strcmp(a,sheng)==0||!strcmp(a,jiang)) 11 return 1; 12 return 0; 13 } 14 15 //前三个是否相同 16 int isQianSan(char *a) 17 { 18 return a[0]==a[1]&&a[0]==a[2]; 19 } 20 //后三个是否相同 21 int isHouSan(char *a) 22 { 23 return a[1]==a[2]&&a[1]==a[3]; 24 } 25 26 //abab模式 27 int isABAB(char *a) 28 { 29 return (a[0]==a[2]&&a[1]==a[3]); 30 } 31 32 //aabb 33 int isAABB(char *a) 34 { 35 return (a[0]==a[1]&&a[2]==a[3]); 36 } 37 38 int is689(char *a) 39 { 40 int count=0; 41 for(int i=0;i<4;i++) 42 if(a[i]=='6'||a[i]=='8'||a[i]=='9') 43 count++; 44 return count; 45 } 46 47 //计算串的分数 48 int sum(char *a) 49 { 50 int sum=0; 51 if(isLianHao(a)) sum+=5; 52 if(isQianSan(a)) sum+=3; 53 if(isHouSan(a)) sum+=3; 54 if(isAABB(a)) sum+=1; 55 if(isABAB(a)) sum+=1; 56 return sum+is689(a); 57 } 58 int main() 59 { 60 int n; 61 char a[MAX][5]; 62 scanf("%d",&n); 63 fflush(stdin); 64 for(int i=0;i<n;i++) 65 gets(a[i]); 66 for(int i=0;i<n;i++) 67 printf("%d\n",sum(a[i])); 68 getchar(); 69 return 0; 70 }