一道面试题,二维数组把行列的数调换问题

javaxs 2011-11-06 01:17:45
感觉程序写的没问题,但是最后还是没调换成功,最后结果和原来一样,没调换,想问问各位大侠是什么问题
下面是写的代码:
#include<iostream>
#include<string>
using namespace std;
void main()
{
int a[3][3],i,j=0,temp;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cin>>a[i][j];
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<3;i++)
{
while(j<3)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
j=j+1;

}
cout<<"调序后的数组为:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}


}
...全文
211 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzcmx2008 2011-11-06
  • 打赏
  • 举报
回复
仔细研究下程序的逻辑
路口转弯 2011-11-06
  • 打赏
  • 举报
回复
你把下面的这段代码:
for(i=0;i<3;i++)
{
while(j<3)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
j=j+1;

}

改为下面这样就成了:
for(i=0;i<3;i++)
{
for(j=0;j<=i;j++)
{
temp=a[j][i];
a[j][i]=a[i][j];
a[i][j]=temp;
}
}
这样可能更好理解!!!
yujie_v 2011-11-06
  • 打赏
  • 举报
回复
这个你写的算法有问题的。
未注销 2011-11-06
  • 打赏
  • 举报
回复
while(j<3)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
j=j+1;

}


改成while (j < i)
支持英文数字 2011-11-06
  • 打赏
  • 举报
回复
在做矩阵转置时首先要考虑到的是二维矩阵行列式是不是相等。如果不相等,需要重新申请一个二维数组存矩阵。如:a[3][5]转置后的结果矩阵是a[5][3].
你想要的行与列相等的行列式转置如下

#include <iostream>
using namespace std;

void swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}

int main(){
int a[3][2] ={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int nSize = 3;
cout << "before exchange" << endl;
for (int i = 0; i < nSize; ++i){
for (int j = 0; j <nSize; ++j){
cout << a[i][j] << " " ;
}
cout << endl;
}
for (int i = 0; i < nSize; ++i){
for (int j = 0; j < i; ++j){
swap(a[i][j], a[j][i]);
}
}
cout << "after exchange:" << endl;
for (int i = 0; i < nSize; ++i){
for (int j = 0; j < nSize; ++j){
cout << a[i][j] << " " ;
}
cout << endl;
}
return 0;
}
zheng_jj 2011-11-06
  • 打赏
  • 举报
回复
应该是这个问题吧
交换了两次,又换回去了
seucs 2011-11-06
  • 打赏
  • 举报
回复
交换对角线上的就行了,记得当初也遇到了你这样的问题,后来手工模拟程序的执行过程才发现交换了两次,导致结果还是没交换
iamnobody 2011-11-06
  • 打赏
  • 举报
回复

for(i=0;i<3;i++)
{
while(j<3)//这个不是死循环吗??怎么可能出结果。。。
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
j=j+1;

}

另外,这个方法是不能交换的,例如,你访问到 a[1][2];就将它与a[2][1]交换,后来你再访问a[2][1]时,又把它与a[1][2]交换了,所以结果是不变的。
应该只交换对角线以上的元素就可以了。

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧