首页
社区
课程
招聘
[求助]练习题目时出现了很奇怪的现象,希望得到解决
2018-2-1 17:09 2416

[求助]练习题目时出现了很奇怪的现象,希望得到解决

2018-2-1 17:09
2416
最近在准备蓝桥杯,练到一个矩阵的幂时,本身并不难,就是总会出错
希望dalao帮忙看一下啊;
#include<stdio.h>
#include<iostream>
#include<string.h>
#define N 100
using namespace std;
int main(){
	int m,n;
    scanf("%d%d",&n,&m);
	int a[N][N];
	int r[N][N];
	int temp[N][N];
	int i,j,k;
	for(i=0;i<n;i++)
       for(j=0;j<n;j++)	
	        scanf("%d",&a[i][j]);
	for(i=0;i<n;i++)
	        r[i][i]=1;
	while(m--)        
	{   
	    memset(temp,0,sizeof(temp));  
        for(i=0;i<n;i++)  
            for(j=0;j<n;j++)  
                for(k=0;k<n;k++)  
                    temp[i][j]+=r[i][k]*a[k][j];  
        for(i=0;i<n;i++)  
            for(j=0;j<n;j++)  
                 r[i][j]=temp[i][j]; 	
	}
	for(i=0;i<n;i++){
	      for(j=0;j<n;j++)	
	        {
	        printf("%d ",r[i][j]);
	    }
	    printf("\n");
}
	
}
这样的话没有问题


但是如果这样子(并没有实质性的问题,就是没有定义全局变量)
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main(){
	int m,n;
    scanf("%d%d",&n,&m);
	int a[n][n];
	int r[n][n];
	int temp[n][n];
	int i,j,k;
	for(i=0;i<n;i++)
       for(j=0;j<n;j++)	
	        scanf("%d",&a[i][j]);
	for(i=0;i<n;i++)
	        r[i][i]=1;
	while(m--)        
	{   
	    memset(temp,0,sizeof(temp));  
        for(i=0;i<n;i++)  
            for(j=0;j<n;j++)  
                for(k=0;k<n;k++)  
                    temp[i][j]+=r[i][k]*a[k][j];  
        for(i=0;i<n;i++)  
            for(j=0;j<n;j++)  
                 r[i][j]=temp[i][j]; 	
	}
	for(i=0;i<n;i++){
	      for(j=0;j<n;j++)	
	        {
	        printf("%d ",r[i][j]);
	    }
	    printf("\n");
}
	
}
就会出现问题
总感觉是越界之类的错误,希望大牛指点下

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 350
活跃值: (51)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
normalized 1 2018-2-1 17:14
2
0
        int  a[n][n];
        int  r[n][n];
        int  temp[n][n];
n换成常数或者用动态数组
雪    币: 1699
活跃值: (760)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wx_Dispa1r 2018-2-1 18:25
3
0
normalized int a[n][n]; int r[n][n]; int temp[n][n]; n换成常数或者用动态数组
qaq谢谢星斗
雪    币: 1699
活跃值: (760)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wx_Dispa1r 2018-2-1 18:25
4
0
是不是因为编译器在输入变量前已经申请好了内存(反正记着以后这样用就行了
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2018-2-2 09:14
5
0
wx_Dispa1r 是不是因为编译器在输入变量前已经申请好了内存(反正记着以后这样用就行了
VC那套东西对可变长度数组支持的好像不是很好。。。不过gcc是可以这么用的,最后会编译成sub  rsp,rax这种代码,其中rax就是从你输入的动态的值所得出的

顺便说一下,你的r没有初始化为0,只初始化了对角线,可能这也是原因之一
./test
2 2
1 2
3 4
7 10
15 22
这是加上memset(r,0,sizeof(r));之后的结果,没加的话15和22那个位置我这里用gcc也是两个乱码数
游客
登录 | 注册 方可回帖
返回