CCF 201412-2 Z字形扫描 pay attention

博客介绍了对角打印问题的解题思路,关键在于找规律。一共有2n - 1趟对角打印,偶数趟从下往上输出,奇数趟从上往下输出,且行号加列号等于趟数,可根据行号或列号递增或递减规律,以其一为基准计算另一个。

在这里插入图片描述
思路:该题的关键在于找规律:一共有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;	
} 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值