1. 程式人生 > >藍橋杯“手機尾號”

藍橋杯“手機尾號”

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

#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;
}