您的位置:首页 > 其它

POJ-1002 487-3279 模拟问题

2014-10-06 13:58 543 查看
    简单的模拟问题,电话号码固定为7位,共n个号码,那么定义一个 char str
[8] 即可,先将输入的字符串根据对应关系转换成电话号码,然后用qsort函数对其排序,对于重复次数,因此时号码已经有序,可以定义一个 int s
={0}来记录号码的重复次数,该数组每位的数值对应排序后的相应位置的电话号码的重复次数-1,具体代码为 for(i=1; i<n; ++i)
if(strcmp(str[i-1],str[i])==0)
{
s[i]=s[i-1]+1;
s[i-1]=0;
}AC代码如下:
#include<stdio.h>
#include<string.h>
int cmp(const void *a,const void *b)
{
char *c=(char *)a,*d=(char *)b;
return strcmp(c,d);
}
void trans(char *a,char*b){
int i,j;
for(i=0,j=0;b[j]!=0&&i<7;++j)
if(b[j]>='0'&&b[j]<='9') a[i++]=b[j];
else switch(b[j]){
case 'A':case 'B':case 'C': a[i++]='2';break;
case 'D':case 'E':case 'F': a[i++]='3';break;
case 'G':case 'H':case 'I': a[i++]='4';break;
case 'J':case 'K':case 'L': a[i++]='5';break;
case 'M':case 'N':case 'O': a[i++]='6';break;
case 'P':case 'R':case 'S': a[i++]='7';break;
case 'T':case 'U':case 'V': a[i++]='8';break;
case 'W':case 'X':case 'Y': a[i++]='9';break;
default: break;
}
a[7]=0;
}
int main()
{
//freopen("in.txt","r",stdin);
int n;
while(~scanf("%d",&n))
{
char str
[8],tmp[50];
int i,j,cnt=-1,s
,flag=0;
for(i=0; i<n; ++i)
{
scanf("%s",tmp);
trans(str[i],tmp);
s[i]=0;
}
qsort(str,n,sizeof(str[0]),cmp);
for(i=1; i<n; ++i)
if(strcmp(str[i-1],str[i])==0)
{
s[i]=s[i-1]+1;
s[i-1]=0;
}
for(i=0; i<n; i++)
{
flag|=s[i];
if(s[i]!=0)
{
for(j=0; j<3; ++j)printf("%c",str[i][j]);
printf("-");
for(; j<7; ++j)printf("%c",str[i][j]);
printf(" %d\n",s[i]+1);
}
else if(i==n-1&&flag==0) printf("No duplicates.\n");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: