
思路:该题的关键在于找规律:一共有2n-1趟对角打印,偶数趟从下往上输出,奇数从上往下打印,且行号加列号总是等于趟数,故可以根据行号或列号的递增或递减规律,以行号或列号其中一个为基准,则另一个为趟数减去那一个。
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n][n];
for(int i=0;i<n;i++)//输入矩阵
{
for(int j=0;j<n;j++)
{
cin >> a[i][j];
}
}
for(int i=0;i<n;i++)//前n斜行输出(可以看出一共有2n-1趟打印)
{
if(i%2==0)//偶数从下往上,以行号的递减规律为基准
{
for(int j=i;j>=0;j--)
{
cout << a[j][i-j] << " ";//利用行号加列号等于i(i是第几趟,从0始)
}
}
else if(i%2==1)//奇数从上往下
{
for(int j=0;j<=i;j++)//行号递增
{
cout << a[j][i-j] << " ";
}
}
}
for(int i=n;i<2*n-1;i++)//后n+1~2n-1斜行打印
{
if(i%2==0)
{
for(int j=i-n+1;j<=n-1;j++)//列号递增
{
cout << a[i-j][j] << " ";
}
}
else
{
for(int j=n-1;j>=i-n+1;j--)//列号递减
{
cout << a[i-j][j] << " ";
}
}
}
cout << endl;
return 0;
}
博客介绍了对角打印问题的解题思路,关键在于找规律。一共有2n - 1趟对角打印,偶数趟从下往上输出,奇数趟从上往下输出,且行号加列号等于趟数,可根据行号或列号递增或递减规律,以其一为基准计算另一个。

被折叠的 条评论
为什么被折叠?



