北大ACM1002题不知道哪里出问题了
这是我的代码,就是第6个位置(a[i][5])不知道哪里出错了希望你们能帮忙看一下不胜感谢!#include<stdio.h>#include<string.h>void...
这是我的代码,就是第6个位置(a[i][5])不知道哪里出错了
希望你们能帮忙看一下
不胜感谢!
#include <stdio.h>
#include <string.h>
void main(void)
{
int n,i,j,tmp,count;
char a[50][20];
char b[20];
char *pa[50];
//读入n
scanf("%d",&n);
getchar();
//读入数据
for (i=0; i<n; i++)
{
gets(a[i]);
pa[i]=a[i];
}
//去-和字母
for (i=0; i<n; i++)
{
for (j=0; a[i][j]!='\0'; j++)
{
switch (a[i][j])
{
case '-':
strcpy(&a[i][j],&a[i][j+1]);//遇到-就把之后的字符移到现在这个位置,把-覆盖掉
j--;
break;
case 'A':
case 'B':
case 'C':
a[i][j]='2';
break;
case 'D':
case 'E':
case 'F':
a[i][j]='3';
break;
case 'G':
case 'H':
case 'I':
a[i][j]='4';
break;
case 'J':
case 'K':
case 'L':
a[i][j]='5';
break;
case 'M':
case 'N':
case 'O':
a[i][j]='6';
break;
case 'P':
case 'R':
case 'S':
a[i][j]='7';
break;
case 'T':
case 'U':
case 'V':
a[i][j]='8';
break;
case 'W':
case 'X':
case 'Y':
a[i][j]='9';
break;
}
}
}
//加-
for (i=0; i<n; i++)
{
strcpy(&a[i][4],&a[i][3]);
a[i][3]='-';
}
//排序
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (strcmp(a[i],a[j])>0)
{
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
}
}
//输出
for (i=0; i<n;)
{
count=1;
for(j=i+1; strcmp(a[i],a[j])==0; j++)
{
count++;
}
if(count!=1)
printf("%s %d\n",a[i],count);
i=j;
}
if (count==1)
printf("No duplicates. ");
} 展开
希望你们能帮忙看一下
不胜感谢!
#include <stdio.h>
#include <string.h>
void main(void)
{
int n,i,j,tmp,count;
char a[50][20];
char b[20];
char *pa[50];
//读入n
scanf("%d",&n);
getchar();
//读入数据
for (i=0; i<n; i++)
{
gets(a[i]);
pa[i]=a[i];
}
//去-和字母
for (i=0; i<n; i++)
{
for (j=0; a[i][j]!='\0'; j++)
{
switch (a[i][j])
{
case '-':
strcpy(&a[i][j],&a[i][j+1]);//遇到-就把之后的字符移到现在这个位置,把-覆盖掉
j--;
break;
case 'A':
case 'B':
case 'C':
a[i][j]='2';
break;
case 'D':
case 'E':
case 'F':
a[i][j]='3';
break;
case 'G':
case 'H':
case 'I':
a[i][j]='4';
break;
case 'J':
case 'K':
case 'L':
a[i][j]='5';
break;
case 'M':
case 'N':
case 'O':
a[i][j]='6';
break;
case 'P':
case 'R':
case 'S':
a[i][j]='7';
break;
case 'T':
case 'U':
case 'V':
a[i][j]='8';
break;
case 'W':
case 'X':
case 'Y':
a[i][j]='9';
break;
}
}
}
//加-
for (i=0; i<n; i++)
{
strcpy(&a[i][4],&a[i][3]);
a[i][3]='-';
}
//排序
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (strcmp(a[i],a[j])>0)
{
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
}
}
//输出
for (i=0; i<n;)
{
count=1;
for(j=i+1; strcmp(a[i],a[j])==0; j++)
{
count++;
}
if(count!=1)
printf("%s %d\n",a[i],count);
i=j;
}
if (count==1)
printf("No duplicates. ");
} 展开
1个回答
展开全部
几个错误
1. 输入量较大,你的空间不够
2. 输入量较大,冒泡明显不合时间要求
3. strcpy的用法错误,体现在strcpy(&a[i][4],&a[i][3]),这里strcpy的两个地址出现空间重合
修改后会得到TLE的Verdict.
#include <stdio.h>
#include <string.h>
main(void)
{
int signal = 1;
int n,i,j,tmp,count;
char a[100000][20];
char b[20];
// char *pa[50];
//读入n
scanf("%d",&n);
getchar();
//读入数据
for (i=0; i<n; i++)
{
gets(a[i]);
// pa[i]=a[i];
}
//去-和字母
for (i=0; i<n; i++)
{
for (j=0; a[i][j]!='\0'; j++)
{
switch (a[i][j])
{
case '-':
strcpy(&a[i][j],&a[i][j+1]);//遇到-就把之后的字符移到现在这个位置,把-覆盖掉
j--;
break;
case 'A':
case 'B':
case 'C':
a[i][j]='2';
break;
case 'D':
case 'E':
case 'F':
a[i][j]='3';
break;
case 'G':
case 'H':
case 'I':
a[i][j]='4';
break;
case 'J':
case 'K':
case 'L':
a[i][j]='5';
break;
case 'M':
case 'N':
case 'O':
a[i][j]='6';
break;
case 'P':
case 'R':
case 'S':
a[i][j]='7';
break;
case 'T':
case 'U':
case 'V':
a[i][j]='8';
break;
case 'W':
case 'X':
case 'Y':
a[i][j]='9';
break;
}
}
}
//加-
for (i=0; i<n; i++)
{
strcpy(b,&a[i][3]); // 修改后
strcpy(&a[i][4],b);
a[i][3]='-';
}
//排序
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (strcmp(a[i],a[j])>0)
{
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
}
}
//输出
for (i=0; i<n;)
{
count=1;
for(j=i+1; strcmp(a[i],a[j])==0; j++)
{
count++;
signal = 0;
}
if(count!=1)
printf("%s %d\n",a[i],count);
i=j;
}
if (signal==1)
printf("No duplicates.");
}
1. 输入量较大,你的空间不够
2. 输入量较大,冒泡明显不合时间要求
3. strcpy的用法错误,体现在strcpy(&a[i][4],&a[i][3]),这里strcpy的两个地址出现空间重合
修改后会得到TLE的Verdict.
#include <stdio.h>
#include <string.h>
main(void)
{
int signal = 1;
int n,i,j,tmp,count;
char a[100000][20];
char b[20];
// char *pa[50];
//读入n
scanf("%d",&n);
getchar();
//读入数据
for (i=0; i<n; i++)
{
gets(a[i]);
// pa[i]=a[i];
}
//去-和字母
for (i=0; i<n; i++)
{
for (j=0; a[i][j]!='\0'; j++)
{
switch (a[i][j])
{
case '-':
strcpy(&a[i][j],&a[i][j+1]);//遇到-就把之后的字符移到现在这个位置,把-覆盖掉
j--;
break;
case 'A':
case 'B':
case 'C':
a[i][j]='2';
break;
case 'D':
case 'E':
case 'F':
a[i][j]='3';
break;
case 'G':
case 'H':
case 'I':
a[i][j]='4';
break;
case 'J':
case 'K':
case 'L':
a[i][j]='5';
break;
case 'M':
case 'N':
case 'O':
a[i][j]='6';
break;
case 'P':
case 'R':
case 'S':
a[i][j]='7';
break;
case 'T':
case 'U':
case 'V':
a[i][j]='8';
break;
case 'W':
case 'X':
case 'Y':
a[i][j]='9';
break;
}
}
}
//加-
for (i=0; i<n; i++)
{
strcpy(b,&a[i][3]); // 修改后
strcpy(&a[i][4],b);
a[i][3]='-';
}
//排序
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (strcmp(a[i],a[j])>0)
{
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
}
}
//输出
for (i=0; i<n;)
{
count=1;
for(j=i+1; strcmp(a[i],a[j])==0; j++)
{
count++;
signal = 0;
}
if(count!=1)
printf("%s %d\n",a[i],count);
i=j;
}
if (signal==1)
printf("No duplicates.");
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询