ABC 335 D - Loong and Takahashi

题目描述:
        这个程序实际上是要打印一个N*N的螺旋矩阵,在螺旋矩阵的中心位置输出T。


思路:
        题目说n 是个奇数,可以从(1,1) 开始,向右走到头,然后右转,然后走到头,然后再右转,然后再走到头,然后再右转……直到填满。
        我的程序中j是控制向左填还是向右填的,i是控制向上填还是向下填的。
        还有什么问题可以看代码注释。

代码:

#include<bits/stdc++.h>
using namespace std;
int num[46][46],n;
int main(){
	num[1][1]=1;//初始为1
	cin>>n;
	for(int i=1,j=1,tot=1;tot<n*n;){//一直填到n*n个数填完
		while(++j<=n&&!num[i][j]) num[i][j]=++tot;
		--j;//向右
		while(++i<=n&&!num[i][j]) num[i][j]=++tot;
		--i;//向下
		while(--j> 0&&!num[i][j]) num[i][j]=++tot;
		++j;//向左
		while(--i> 0&&!num[i][j]) num[i][j]=++tot;
		++i;//向上
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(num[i][j]!=n*n) cout<<num[i][j]<<" ";//输出	
			else cout<<"T ";		
		}
		cout<<endl;
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值