描述:有一个n*n维数组,实现从右上角到左下角沿主对角线方向打印
一重循环解决!
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cout<<"enter n:\n";
cin >> n;
vector<vector<int> > a(n, vector<int> (n));
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
cin >> a[i][j];
}
int i = 0;
int j = n - 1;
int k = 1;
cout<<"result is:\n";
while(k < 2 * n)
{
cout << a[i++][j++]<<" ";
if(k <= n)
{
if(j == n)
{
++k;
i = 0;
j = n - k;
if(j < 0)
{
i = 1;
j = 0;
}
}
}
else
{
if(i == n)
{
++k;
i = k - n;
j = 0;
}
}
}
cout<<endl;
return 0;
}
另一种解法:
vector<int> arrayPrint(vector<vector<int> > arr, int n)
{
vector<int> res;
for (int i = 0; i < n; ++i)
for (int j = 0; j <= i; ++j)
res.push_back(arr[j][n - i + j - 1]);
for (int i = n - 1; i > 0; --i)
for (int j = 0; j < i; ++j)
res.push_back(arr[n - i + j][j]);
return res;
}