您的位置:首页 > 其它

UVa 755 487-3279

2014-02-08 18:16 369 查看
/*

* 解题思路:

*       将字母转换成数字后,排序,然后再判断是否有重复,如果没重复数据输出,No duplicates.

* 否则列举标准形式重复数据及重复个数

*/

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char s[ 100005 ][ 10 ];
char convert[ 30 ] = "2223334445556667777888999";
int p;
int cmp( const void *a , const void *b )
{ return strcmp( (char *)a , (char *)b ); }
int main( )
{
int t;
int n,sum,flag;
int i,j;
char c;

scanf("%d",&t);
while( t-- )
{
scanf("%d",&n);
getchar( );
p = 0;
for( i=0;i<n;i++ )
{
j = 0;
while( (c = getchar( )) != '\n' )
if( isdigit( c ) )
s[ p ][ j++ ] = c;
else if( isalpha( c ) )
s[ p ][ j++ ] = convert[c-'A'];
s[ p ][ j ] = '\0';
p++;
}

qsort( s , p , sizeof( s[ 0 ] ) ,cmp );
strcpy(s[p],"A");
sum = 1;
flag = 0;
for( i=0;i<p;i++ )
if( strcmp( s[ i ] , s[ i+1 ] ) == 0 )
sum++;
else
if( sum >1 )
{
flag = 1;
for( j=0;j<7;j++ )
{
if( j == 3 ) printf("-");
printf("%c",s[ i ][ j ]);
}
printf(" %d\n",sum);
sum = 1;
}
if( !flag )
printf("No duplicates.\n");
if( t ) puts("");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: