数据过多无法显示,之前没描述清楚……我在多说一点,这个是二维数组完成矩阵转置,维度是10和100000,按上课讲的意思是,1010和100000100000,1010的按我写的把100000改成10是可以正确运行的,100000100000的我刚去问过说肯定显示不出来,可以不完全显示,比如显示开头和结尾,或者其他方案,都可以,没有固定的办法,只要合理就行。我有尝试过改成100100也是正常运行的,结果也会出来,100000100000可能是太大了,不知道有没有好的解决方案。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand((int)time(0));
int a[100000][100000], b[100000][100000];
int i, j;
//A
for (i = 0; i < 100000; i++)
for (j = 0; j < 100000; j++)
a[i][j]=rand()%100;
//输出A
cout << "A="<<endl;
for (i = 0; i < 100000; i++)
{
for (j = 0; j < 100000; j++)
cout << a[i][j] << '\t';
cout << endl;
}
//B=A转置
for (i = 0; i < 100000; i++)
for (j = 0; j < 100000; j++)
b[i][j]=a[j][i];
//输出B
cout << "转置="<<endl;
for (i = 0; i < 100000; i++)
{
for (j = 0; j < 100000; j++)
cout << b[i][j] << '\t';
cout << endl;
}
return 0;
}
内存太大了,可以改成动态数组vector试试看,内存将近20~30GB呢
程序返回值不为0,运行错误。
数组开的太大了,改成动态数组。
你这数据也太大了。
100000x100000x4=40,000,000,000 一个数组就得30多G了。
你这申请的a和b数组空间太大了。你为啥要申请这么大空间呢???
你知道你申请多大空间吗?10万的平方,大概9-10个G!!! ,你内存都没这么大吧。
题目看一下。应该不需要这么大。否则你怎么搞也不行的。a和b加起来就要20G内存啊
不是展示不了,是你把数组放在main里面的问题。你把数组开到外面应该就会Ok。
再回答你那个展示不了的问题,你可以写上:
freopen("input.txt", "r", stdin); // 重定向输入,即从input.txt读取输入
freopen("output.txt", "w", stdout); // 重定向输出
// 中间放你的程序,输出将会直接保存到output.txt
fclose(stdin);
fclose(stdout);
int 4字节。a[100000][100000]占用4*10^10字节,换成GB约等于37.253GB...
题目应该是10w个数字吧,你写成a[1000][100]就可以啦,你转置的时候借助一个临时变量就行,这么搞内存不够用啊
先在小数据里面打印出来,测试代码是否正确,没问题再把数据改大就行了,直接输出这么大的数据,啥办法都不好使
二维数组开的太大了,如果开这么大数组的需要,可以考虑动态数组或者动态处理数据。
降到a[100][100]、b[100][100]试试。
如有帮助,还请采纳!谢谢!
数据组开的太大了
返回不为0,RE了啊,你二维数组开太大了,顶多开到两位积为1e7,否则会炸