本站遷移

因為我最近租用了網路空間以及網域,
故本站已遷移至新網站~
這邊的資訊已經正在進行搬移的工作~
希望各位可以到新網站去逛XD

New Website:
http://knightzone.org/

搜尋此網誌

2011年1月21日 星期五

[UVa]755:487--3279

先將每一種不同格式的電話號碼全部換成7位數整數,
利用一個hash紀錄每一種電話號碼的出現的次數,
將出現兩次以上的電話號碼紀錄到一個陣列裡面,
再利用quicksort將這個陣列以電話號碼來排序,
最後從頭將電話號碼及其出現的次數輸出來即可。

[C](0.420)
#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;
}
view raw UVa755.c hosted with ❤ by GitHub

0 意見:

張貼留言