Runtime Error?你可能是数组没开成全局变量。

 看一道XTU OJ 1258

矩阵

题目描述

编写一个程序,将1~n2按行依次填入n×n的矩阵,执行若干条行或者列的循环移动的指令,再将数字按行依次取出。

指令如下:

指令含义
L x yx行循环左移y次
R x yx行循环右移y次
U x yx列循环上移y次
D x yx列循环下移y次

输入

第一行是一个整数K,表示样例的个数。 每个样例的第一行是两个整数n(1≤n≤10)和m(1≤m≤1000),分别表示矩阵的大小和指令的条数。
以后的m行是m条指令,矩阵的行列按1开始计数,指令满足1≤x≤n,1≤y≤n−1。

输出

每行输出一个样例的结果,数字之间用一个空格隔开,行末无空格。

样例输入

4
3 1
L 1 1
3 1
R 1 1
3 1
U 1 1
3 1
D 1 1

样例输出

2 3 1 4 5 6 7 8 9
3 1 2 4 5 6 7 8 9
4 2 3 7 5 6 1 8 9
7 2 3 1 5 6 4 8 9

 

#include <stdio.h>
#include <string.h>
int a[11][11]={0};//假如我们不开这个全局变量,而是如下
int main(){
	int k;
	scanf("%d", &k);
	while(k--){
		int n,m;
		scanf("%d %d", &n, &m);
/*
在此处使用变长数组,那么就会RE
*/
		int cnt=1;
		int i,j;
		for(i=1;i<=n;i++){
			for(j=1;j<=n;j++){
				a[i][j]=cnt;
				cnt++;
			}
		}
		//	cout<<a[1][1]<<endl;
		int x,y,temp;
		char ch;
		while(m--){
			scanf(" %c %d %d", &ch, &x, &y);
			int t_y=y;
			if(ch=='L'){
				while(y--){//y被使用
					temp=a[x][1];
					for(j=1;j<n;j++){
						
						a[x][j]=a[x][j+1];
					}
					a[x][n]=temp;
				}
				y=t_y;
			}else if(ch=='R'){
				while(y--){//y被使用
					temp=a[x][n];
					for(j=n;j>1;j--){
						
						a[x][j]=a[x][j-1];
					}
					a[x][1]=temp;
				}
				y=t_y;
			}else if(ch=='U'){
				while(y--){//y被使用
					temp=a[1][x];
					for(j=1;j<n;j++){
						
						a[j][x]=a[j+1][x];
					}
					a[n][x]=temp;
				}
				y=t_y;
			}else{
				while(y--){//y被使用
					temp=a[n][x];
					for(j=n;j>1;j--){
						
						a[j][x]=a[j-1][x];
					}
					a[1][x]=temp;
				}
				y=t_y;
			}
		}
		for(i=1;i<=n;i++){
			for(j=1;j<=n;j++){
				if(i!=n||j!=n) printf("%d ",a[i][j]);
				else printf("%d\n",a[n][n]);
			}
		}
	}
	return 0;
}

 再补充几个RE的情况:

根据经验,大多数情况是因为程序员对内存的理解不透彻导致错误应用引起的,简单的说几个常见的:
①除以零的情况,比如1/0此类的。
②数组越界:int a[3]; 但程序中的要求却至少是一个为100的数组。
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free§; *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];Runtime error。
----百度知道

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值