poj 1002题一直现实wrong answer,但是自己测试正确

请大家帮忙看看,谢谢啦#include<stdio.h>#include<stdlib.h>#include<string.h>structs{charstr[20];i... 请大家帮忙看看,谢谢啦
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct s{
char str[20];
int i;
};

struct s nu[100000];

int cmp(const void *a,const void *b)
{
return ((int *)a)[0]-((int *)b)[0];
}

int main()
{
int m,n;
int i,j;
int x,z;

scanf("%d",&m);
for(n=0;n<m;n++)
{
scanf("%s",nu[n].str);
nu[n].i=1;
}

for(n=0;n<m;n++)
for(j=0;j<20;j++)
if( (nu[n].str[j]!='\0') && (j!=3) )
{
switch(nu[n].str[j])
{
case 'A':
case 'B':
case 'c':
nu[n].str[j]='2';
break;
case 'D':
case 'E':
case 'F':
nu[n].str[j]='3';
break;
case 'G':
case 'H':
case 'I':
nu[n].str[j]='4';
break;
case 'J':
case 'K':
case 'L':
nu[n].str[j]='5';
break;
case 'M':
case 'N':
case 'O':
nu[n].str[j]='6';
break;
case 'P':
case 'R':
case 'S':
nu[n].str[j]='7';
break;
case 'T':
case 'U':
case 'V':
nu[n].str[j]='8';
break;
case 'W':
case 'X':
case 'Y':
nu[n].str[j]='9';
break;
case '-':
while(nu[n].str[j]=='-')
{
i=j;
do{
nu[n].str[i]=nu[n].str[i+1];
i++;
}while(nu[n].str[i]);
}
j--;
break;
}
}
else if( j == 3 )
{
for(i=19;i>3;i--)
{
nu[n].str[i]=nu[n].str[i-1];
}
nu[n].str[j]='-';
}

qsort(nu,m,sizeof(struct s),cmp);

x = 1; z = 0;
for( i = 1; i < m; i++ )
{
if( strcmp( nu[i-1].str, nu[i].str ) )
{
if( x > 1 )
{
printf( "%s %d\n", nu[i-1].str, x );
z = 1;
}
x = 1;
}
else
{
x++;
}
}

if( x > 1 )
{
printf( "%s %d\n", nu[i-1].str, x );
z = 1;
}

if(z==0)
printf("No duplicates.\n");

return 0;
}
展开
 我来答
军天下wolfer
2013-11-11 · TA获得超过2081个赞
知道小有建树答主
回答量:734
采纳率:100%
帮助的人:939万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct s{
char str[50];//字符串开到50,太小会Wrong Answer
int i;
};

struct s nu[100010];

int cmp(const void *a,const void *b)
{
return strcmp(((char *)a),((char *)b));// 这里是字符串比较
}

int main()
{
int m,n;
int i,j;
int x,z;

scanf("%d",&m);
for(n=0;n<m;n++)
{
scanf("%s",nu[n].str);
nu[n].i=1;
}

for(n=0;n<m;n++)
for(j=0;j<50;j++)// j<50
if( (nu[n].str[j]!='\0') && (j!=3) )
{
switch(nu[n].str[j])
{
case 'A':
case 'B':
case 'C':// 这里是大写的‘C’
nu[n].str[j]='2';
break;
case 'D':
case 'E':
case 'F':
nu[n].str[j]='3';
break;
case 'G':
case 'H':
case 'I':
nu[n].str[j]='4';
break;
case 'J':
case 'K':
case 'L':
nu[n].str[j]='5';
break;
case 'M':
case 'N':
case 'O':
nu[n].str[j]='6';
break;
case 'P':
case 'R':
case 'S':
nu[n].str[j]='7';
break;
case 'T':
case 'U':
case 'V':
nu[n].str[j]='8';
break;
case 'W':
case 'X':
case 'Y':
nu[n].str[j]='9';
break;
case '-':
while(nu[n].str[j]=='-')
{
i=j;
do{
nu[n].str[i]=nu[n].str[i+1];
i++;
}while(nu[n].str[i]);
}
j--;
break;
}
}
else if( j == 3 )
{
for(i=49;i>3;i--)// j从49开始递减
{
nu[n].str[i]=nu[n].str[i-1];
}
nu[n].str[j]='-';
}

qsort(nu,m,sizeof(struct s),cmp);

x = 1; z = 0;
for( i = 1; i < m; i++ ) 
{
if( strcmp( nu[i-1].str, nu[i].str ) ) 
{
if( x > 1 ) 
{
printf( "%s %d\n", nu[i-1].str, x );
z = 1;
}
x = 1;

else 
{
x++;
}
}

if( x > 1 ) 
{
printf( "%s %d\n", nu[i-1].str, x );
z = 1;
}

if(z==0)
printf("No duplicates.\n");

return 0;
}

这个可以AC,欢迎交流哈,满意请采纳。

秉光
2013-11-11
知道答主
回答量:5
采纳率:0%
帮助的人:6702
展开全部
发现你case里面有个小写的C,另外这个题的电话号码好像很长 我设50都出错,100位没问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式