
ACM的字符替换问题“University”,总是runtime error,是什么原因呢?
Description在大学里,很多单词都是一词多义,偶尔在文章里还要用引申义。这困扰Redraiment很长的时间。他开始搜集那些单词的所有意义。他发现了一些规律,例如...
Description
在大学里,很多单词都是一词多义,偶尔在文章里还要用引申义。这困扰Redraiment很长的时间。他开始搜集那些单词的所有意义。他发现了一些规律,例如 “a”能用“e”来代替, “c”能用“f”来代替…… 现在他给出了字母的替换规则,如下所示,A被E替换,B被C替换,依次类推。 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z E C F A J K L B D G H I V W Z Y M N O P Q R S T U X a b c d e f g h i j k l m n o p q r s t u v w x y z e r w q t y g h b n u i o p s j k d l f a z x c v m
Input
本题包括多组测试数据。 每组测试数据为一行:为仅由字母和空格组成的字符串(空格不变)。 输入以单行“#”结束。
Output
对应每组测试数据,替换后输出它的引申义。
Sample Input
Ilttabaje zaujljg
#
Sample Output
Different meaning
以下是我的代码,求指教~~
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 5000
char a[N],b[N][N];
int n[N];
int main()
{
int i,j,k;
for(j=0;;j++)
{
memset(a,0,sizeof(a));
fgets(a,sizeof(a),stdin);
n[j]=strlen(a);
if(a[0]=='#'&&a[1]=='\n') break;
for(i=0;i<n[j];i++)
{
if(a[i]==' ') b[i][j]=' ';
else if(a[i]=='A') b[i][j]='E'; else if(a[i]=='B') b[i][j]='C'; ...................字符替换部分,太长省略了..................... else if(a[i]=='y') b[i][j]='v'; else if(a[i]=='z') b[i][j]='m';
else b[i][j]=a[i];
}
}
for(k=0;k<j;k++)
{
for(i=0;i<n[k];i++)
printf("%c",b[i][k]);
}
return 0;
} 展开
在大学里,很多单词都是一词多义,偶尔在文章里还要用引申义。这困扰Redraiment很长的时间。他开始搜集那些单词的所有意义。他发现了一些规律,例如 “a”能用“e”来代替, “c”能用“f”来代替…… 现在他给出了字母的替换规则,如下所示,A被E替换,B被C替换,依次类推。 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z E C F A J K L B D G H I V W Z Y M N O P Q R S T U X a b c d e f g h i j k l m n o p q r s t u v w x y z e r w q t y g h b n u i o p s j k d l f a z x c v m
Input
本题包括多组测试数据。 每组测试数据为一行:为仅由字母和空格组成的字符串(空格不变)。 输入以单行“#”结束。
Output
对应每组测试数据,替换后输出它的引申义。
Sample Input
Ilttabaje zaujljg
#
Sample Output
Different meaning
以下是我的代码,求指教~~
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 5000
char a[N],b[N][N];
int n[N];
int main()
{
int i,j,k;
for(j=0;;j++)
{
memset(a,0,sizeof(a));
fgets(a,sizeof(a),stdin);
n[j]=strlen(a);
if(a[0]=='#'&&a[1]=='\n') break;
for(i=0;i<n[j];i++)
{
if(a[i]==' ') b[i][j]=' ';
else if(a[i]=='A') b[i][j]='E'; else if(a[i]=='B') b[i][j]='C'; ...................字符替换部分,太长省略了..................... else if(a[i]=='y') b[i][j]='v'; else if(a[i]=='z') b[i][j]='m';
else b[i][j]=a[i];
}
}
for(k=0;k<j;k++)
{
for(i=0;i<n[k];i++)
printf("%c",b[i][k]);
}
return 0;
} 展开
2个回答
展开全部
看完LZ的代码我怎么觉得好像你的程序只要输入'#'或回车,然后输出结果就不能在输入了;
我应该没搞错把~虽然我不是学C的~OJ通常都是有多组输入数据的,而且题目也有说明,只是以'#'为每个case的结束;
而且我觉得你开一个b[N][N];数组太浪费内存了,这个换成一维数组就应该OK了把~;
就是把a[i]的字母换成对应的字母放入b[i]就行了把,就像if(a[i]=='A') b[i]=‘E’这样,然后在按顺序讲数组b输出就OK了把;
至于LZ所说的runing error有以下几种可能:
Runtime Error (RE) : 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。以下列出常见的错误类型:
ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。一般例如指针、数组下标越界都会造成这个错误的。
ARRAY_BOUNDS_EXCEEDED 您的程序试图访问一个超出硬件支持范围的数组单元。
FLOAT_DENORMAL_OPERAND 进行了一个非正常的浮点操作。一般是由于一个非正常的浮点数参与了浮点操作所引起的,比如这个数的浮点格式不正确。
FLOAT_DIVIDE_BY_ZERO 浮点数除法出现除数为零的异常。
FLOAT_OVERFLOW 浮点溢出。要表示的数太大,超出了浮点数的表示范围。
FLOAT_UNDERFLOW 浮点下溢。要表示的数太小,超出了浮点数的表示范围。
INTEGER_DIVIDE_BY_ZERO 在进行整数除法的时候出现了除数为零的异常。
INTEGER_OVERFLOW 整数溢出。要表示的数值太大,超出了整数变量的范围。
STACK_OVERFLOW 栈溢出。一般是由于无限递归或者在函数里使用了太大的数组变量的原因。
我觉得你的程序应该是因为数组开小了~而导致的数组越界,因为我学的是C++所以用string就可以了,即使在长的不会越界,C语言我就不知道怎么用了~~LZ尝试把数组开大点把~!
我应该没搞错把~虽然我不是学C的~OJ通常都是有多组输入数据的,而且题目也有说明,只是以'#'为每个case的结束;
而且我觉得你开一个b[N][N];数组太浪费内存了,这个换成一维数组就应该OK了把~;
就是把a[i]的字母换成对应的字母放入b[i]就行了把,就像if(a[i]=='A') b[i]=‘E’这样,然后在按顺序讲数组b输出就OK了把;
至于LZ所说的runing error有以下几种可能:
Runtime Error (RE) : 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。以下列出常见的错误类型:
ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。一般例如指针、数组下标越界都会造成这个错误的。
ARRAY_BOUNDS_EXCEEDED 您的程序试图访问一个超出硬件支持范围的数组单元。
FLOAT_DENORMAL_OPERAND 进行了一个非正常的浮点操作。一般是由于一个非正常的浮点数参与了浮点操作所引起的,比如这个数的浮点格式不正确。
FLOAT_DIVIDE_BY_ZERO 浮点数除法出现除数为零的异常。
FLOAT_OVERFLOW 浮点溢出。要表示的数太大,超出了浮点数的表示范围。
FLOAT_UNDERFLOW 浮点下溢。要表示的数太小,超出了浮点数的表示范围。
INTEGER_DIVIDE_BY_ZERO 在进行整数除法的时候出现了除数为零的异常。
INTEGER_OVERFLOW 整数溢出。要表示的数值太大,超出了整数变量的范围。
STACK_OVERFLOW 栈溢出。一般是由于无限递归或者在函数里使用了太大的数组变量的原因。
我觉得你的程序应该是因为数组开小了~而导致的数组越界,因为我学的是C++所以用string就可以了,即使在长的不会越界,C语言我就不知道怎么用了~~LZ尝试把数组开大点把~!
追问
谢谢你告诉我这么多!我把数组开到50000,b也改到一维的了,可是还是RE。。。
追答
你做的是哪的OJ 给个网站给我~我去看看这题
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询