利用一個hash紀錄每一種電話號碼的出現的次數,
將出現兩次以上的電話號碼紀錄到一個陣列裡面,
再利用quicksort將這個陣列以電話號碼來排序,
最後從頭將電話號碼及其出現的次數輸出來即可。
[C](0.420)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<string.h> | |
#include<ctype.h> | |
void quicksort( int start, int end, int array[] ) | |
{ | |
if( start < end ) | |
{ | |
int change = start; | |
int i; | |
int temp; | |
for( i = start+1 ; i < end ; i++ ) | |
if( array[i] < array[start] ) | |
{ | |
change++; | |
temp = array[i]; | |
array[i] = array[change]; | |
array[change] = temp; | |
} | |
temp = array[start]; | |
array[start] = array[change]; | |
array[change] = temp; | |
quicksort( start, change, array ); | |
quicksort( change+1, end, array ); | |
} | |
} | |
int hash_numbers[10000005] = {0}; | |
int main() | |
{ | |
int datasets; | |
int blank; | |
while( scanf( "%d", &datasets ) != EOF ) | |
{ | |
blank = 0 ; | |
int numbers; | |
while( datasets-- ) | |
{ | |
scanf( "%d", &numbers ); | |
getchar(); | |
int i; | |
memset( hash_numbers, 0, sizeof(hash_numbers) ); | |
int output[100005] = {0}; | |
int output_saved = 0; | |
for( i = 0 ; i < numbers ; i++ ) | |
{ | |
char tempnum[1005]; | |
gets( tempnum ); | |
int templen = strlen( tempnum ); | |
int tempnumint = 0; | |
int j; | |
for( j = 0 ; j < templen ; j++ ) | |
{ | |
if( isalnum( tempnum[j] ) ) | |
{ | |
tempnumint *= 10; | |
if( isdigit( tempnum[j] ) ) | |
tempnumint += (int)(tempnum[j] - '0'); | |
else | |
{ | |
switch( tempnum[j] ) | |
{ | |
case 'A': case 'B': case 'C': | |
tempnumint += 2; | |
break; | |
case 'D': case 'E': case 'F': | |
tempnumint += 3; | |
break; | |
case 'G': case 'H': case 'I': | |
tempnumint += 4; | |
break; | |
case 'J': case 'K': case 'L': | |
tempnumint += 5; | |
break; | |
case 'M': case 'N': case 'O': | |
tempnumint += 6; | |
break; | |
case 'P': case 'R': case 'S': | |
tempnumint += 7; | |
break; | |
case 'T': case 'U': case 'V': | |
tempnumint += 8; | |
break; | |
case 'W': case 'X': case 'Y': | |
tempnumint += 9; | |
break; | |
} | |
} | |
} | |
} | |
hash_numbers[tempnumint]++; | |
if( hash_numbers[tempnumint] == 2 ) | |
output[output_saved++] = tempnumint; | |
} | |
quicksort( 0, output_saved, output ); | |
if( blank ) | |
printf( "\n" ); | |
blank = 1; | |
for( i = 0 ; i < output_saved ; i++ ) | |
printf( "%03d-%04d %d\n", output[i]/10000, output[i]%10000, hash_numbers[output[i]] ); | |
if( output_saved == 0 ) | |
printf( "No duplicates.\n" ); | |
} | |
} | |
return 0; | |
} |
0 意見:
張貼留言