-
题目描述:
-
输入一个N(N<=10)阶方阵,按照如下方式调整方阵:
1.将第一列中最大数所在的行与第一行对调。
2.将第二列中从第二行到第N行最大数所在的行与第二行对调。
依此类推...
N-1.将第N-1列中从第N-1行到第N行最大数所在的行与第N-1行对调。
N.输出这个方阵
-
输入:
-
包含多组测试数据,每组测试数据第一行为一个整数N,表示方阵的阶数.
接下来输入这个N阶方阵.
-
输出:
-
调整后的方阵
-
样例输入:
-
4 3 6 8 7 6 7 5 3 8 6 5 3 9 8 7 2
样例输出:
9 8 7 2 6 7 5 3 3 6 8 7 8 6 5 3
代码如下:
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<map>
#include<iterator>
#include<algorithm>
#include<numeric>
#include<cmath>
#include<sstream>
#include<bitset>
using namespace std;
void myswap(vector<int>& a, vector<int>& b);
int main()
{
//#ifdef online_judge
//#else
// freopen("d:\\in.txt", "r", stdin);
// freopen("d:\\out.txt", "w", stdout);
//#endif // online_judeg
int n(0);
while (cin >> n)
{
int t;
vector<vector<int> > coll(n);
int flag(0);//标记最大元素所在的行
for (int i = 0; i < n; i++)
{
coll[i].resize(n);
for (int j = 0; j < n; j++)
{
cin >> t;
coll[i][j] = t;
}
}
for (int i = 0; i < n - 1; i++)//从第0列到第n-2列
{
int max = coll[i][i];
flag = i;
for (int j = i + 1; j < n; j++)//从第i+1行到第n-1行
{
if (coll[j][i]>max)
{
flag = j;
max = coll[j][i];
}
}
myswap(coll[flag], coll[i]);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (j == n - 1 )
{
cout << coll[i][j] << endl;
}
else
{
cout << coll[i][j] << " ";
}
}
}
}
return 0;
}
void myswap(vector<int>& a, vector<int>& b)
{
vector<int> c;
for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
{
c.push_back(*it);
}
a.clear();
a = b;
b.clear();
b = c;
}