您的位置:首页 > 其它

POJ_1002_487-3279

2010-07-16 20:37 441 查看
//排序
//可以用到<ctype.h>中的一些函数
//isalnum() 功能:判断字符变量c是否为字母或数字
//说明:当c为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。
//isalpha() 判断字符ch是否为英文字母
//isdigit() 判断字符c是否为数字
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<algorithm>
using namespace std;
char s[100002][50];
int num[28]={0,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0};
int cmp(const void* _a,const void* _b)
{
char *a=(char *)_a;
char *b=(char *)_b;
return strcmp(a,b);
}
int main()
{
freopen("E.9.dat","r",stdin);
freopen("out.txt","w",stdout);
int n;
while(scanf("%d",&n)==1)
{
char temp[50];
int i,len,j,k,end=0,t=1;
//存储输入数据,并进行预处理
for(i=0;i<n;i++)
{
scanf("%s",temp);
len=strlen(temp);
for(j=0,k=0;j<len;j++)
{
if(isalpha(temp[j]))
{
s[i][k++]=num[temp[j]-'A'+1]+'0';
}
if(temp[j]>='0'&&temp[j]<='9')
{
s[i][k++]=temp[j];
}
}
s[i][k]='/0';
}
//排序
qsort(s,n,sizeof(s[0]),cmp);
//设置s
用于比较最后一个号码
s
[0]='/0';
/*printf("----/n");
for(i=0;i<n;i++)
printf("%s/n",s[i]);
printf("----/n");*/
//查找,若有连续两个以上相同的号码,则将其按规定输出
//end用于判断是否有重复号码,end值不变则说明没有重复号码
for(i=1;i<=n;i++)
{
if(strcmp(s[i-1],s[i])==0)
{
t++;
end=1;
}
else
{
if(t>1)
{
end=1;
for(j=0;j<7;j++)
{
if(j==2)
printf("%c-",s[i-1][j]);
else
printf("%c",s[i-1][j]);
}
printf(" %d/n",t);
}
t=1;
}
}
if(end==0)
printf("No duplicates./n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: