北大ACM1002题 在Visual c++上执行成功,为什么提交后总是Wrong Answer
#include<stdio.h>#include<stdlib.h>#include<string.h>structphone{charnum[8];intcount;...
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct phone
{
char num[8];
int count;
};
void convert(char q[], char p[])
{
int i,j=0;char d;
for(i=0;j<7;i++)
switch(p[i])
{
case 'A': case 'B': case 'C':{q[j]='2';j++;continue;}
case 'D': case 'E': case 'F':{q[j]='3';j++;continue;}
case 'G': case 'H': case 'I':{q[j]='4';j++;continue;}
case 'J': case 'K': case 'L':{q[j]='5';j++;continue;}
case 'M': case 'N': case 'O':{q[j]='6';j++;continue;}
case 'P': case 'S': case 'R':{q[j]='7';j++;continue;}
case 'V': case 'T': case 'U':{q[j]='8';j++;continue;}
case 'Y': case 'W': case 'X':{q[j]='9';j++;continue;}
case '-':continue;
default:{ d=p[i];q[j]=d;j++;continue;}
}
q[7]=0;
}
int compare(const void *a,const void *b)
{
return strcmp(((phone *)a)->num,((phone *)b)->num);
}
int main()
{
FILE *fli;
FILE *flo;
fli=stdin;
flo=stdout;
char p1[30];
int m;
while( scanf("%d",&m)!=EOF)
{
phone *sta=new phone[m];
int i,t=0;
char q1[8]={'0','0','0','0','0','0','0',0};
for(i=1;i<=m;i++)
{ scanf("%s",p1);
int oo=0;
convert(q1,p1);
if(t==0)
{ strcpy(sta[0].num,q1);
sta[0].count=1;
t++; }
else {
for(int j=0;j<t;j++)
{
if(strcmp(sta[j].num,q1)==0)
{sta[j].count++;
oo=1;
break;}
}
if(oo==0)
{
strcpy(sta[t].num,q1);
sta[t].count=1;
t++;
}
}//else
}//for
qsort(sta,m,sizeof(phone),compare);
int uu=0,k;
for(i=0;i<t;i++)
{
if(sta[i].count!=1){
for(k=0;k<3;k++)
printf("%c",sta[i].num[k]);
printf("-");
for(;k<7;k++)
printf("%c",sta[i].num[k]);
printf(" %d\n",sta[i].count);
uu=1;
}
}
if(uu==0)
printf("No duplicates.\n");
}//while
return 0;
}
}
这是对的!只是我的程序支持多组数据测试,而题目没这要求!!!!! 展开
#include<stdlib.h>
#include<string.h>
struct phone
{
char num[8];
int count;
};
void convert(char q[], char p[])
{
int i,j=0;char d;
for(i=0;j<7;i++)
switch(p[i])
{
case 'A': case 'B': case 'C':{q[j]='2';j++;continue;}
case 'D': case 'E': case 'F':{q[j]='3';j++;continue;}
case 'G': case 'H': case 'I':{q[j]='4';j++;continue;}
case 'J': case 'K': case 'L':{q[j]='5';j++;continue;}
case 'M': case 'N': case 'O':{q[j]='6';j++;continue;}
case 'P': case 'S': case 'R':{q[j]='7';j++;continue;}
case 'V': case 'T': case 'U':{q[j]='8';j++;continue;}
case 'Y': case 'W': case 'X':{q[j]='9';j++;continue;}
case '-':continue;
default:{ d=p[i];q[j]=d;j++;continue;}
}
q[7]=0;
}
int compare(const void *a,const void *b)
{
return strcmp(((phone *)a)->num,((phone *)b)->num);
}
int main()
{
FILE *fli;
FILE *flo;
fli=stdin;
flo=stdout;
char p1[30];
int m;
while( scanf("%d",&m)!=EOF)
{
phone *sta=new phone[m];
int i,t=0;
char q1[8]={'0','0','0','0','0','0','0',0};
for(i=1;i<=m;i++)
{ scanf("%s",p1);
int oo=0;
convert(q1,p1);
if(t==0)
{ strcpy(sta[0].num,q1);
sta[0].count=1;
t++; }
else {
for(int j=0;j<t;j++)
{
if(strcmp(sta[j].num,q1)==0)
{sta[j].count++;
oo=1;
break;}
}
if(oo==0)
{
strcpy(sta[t].num,q1);
sta[t].count=1;
t++;
}
}//else
}//for
qsort(sta,m,sizeof(phone),compare);
int uu=0,k;
for(i=0;i<t;i++)
{
if(sta[i].count!=1){
for(k=0;k<3;k++)
printf("%c",sta[i].num[k]);
printf("-");
for(;k<7;k++)
printf("%c",sta[i].num[k]);
printf(" %d\n",sta[i].count);
uu=1;
}
}
if(uu==0)
printf("No duplicates.\n");
}//while
return 0;
}
}
这是对的!只是我的程序支持多组数据测试,而题目没这要求!!!!! 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询