当前位置: 首页 > article >正文

CSP/信奥赛C++语法基础刷题训练(16):洛谷P5731:蛇形方阵

CSP/信奥赛C++语法基础刷题训练(16):洛谷P5731:蛇形方阵

在这里插入图片描述

题目描述

给出一个不大于 9 9 9 的正整数 n n n,输出 n × n n\times n n×n
的蛇形方阵。

从左上角填上 1 1 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 3 个字符,前面使用空格补齐。

输入格式

输入一个正整数 n n n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

样例 #1

样例输入 #1

4

样例输出 #1

1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

提示

数据保证, 1 ≤ n ≤ 9 1 \leq n \leq 9 1n9

AC代码

#include<bits/stdc++.h>
using namespace std;
/*思路: 
根据题意和样例理解如下:
方向顺序为:右、下、左、上
改变方向的条件为出界或碰到已经填数的格子 
*/ 
int n,a[10][10]; 
int main(){
	cin>>n;
	int x=1,y=0;//x代表行,y代表列 (模拟从1,0开始往1,1走)
	int k=1;//从1开始填数字
	while(k<=n*n){//n*n的格子,最大数字为n方 
		//往右走
		while(y<n && a[x][y+1]==0){
			a[x][y+1]=k;
			y++; k++;
		}
		//往下走
		while(x<n && a[x+1][y]==0){
			a[x+1][y]=k;
			x++; k++;
		} 
		//往左走
		while(y>1 && a[x][y-1]==0){
			a[x][y-1]=k;
			y--; k++;
		} 
		//往上走
		while(x>1 && a[x-1][y]==0){
			a[x-1][y]=k;
			x--; k++;
		} 
	}
	//输出
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<setw(3)<<a[i][j];//setw用于设置场宽 
			//printf("%3d",a[i][j])//也可以使用printf 
		}
		cout<<endl;
	} 
	return 0;
} 

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容


http://www.kler.cn/a/401839.html

相关文章:

  • git合并分支
  • 2024年低压电工证考试题库及低压电工试题解析
  • 基于Java Springboot幼儿园管理系统
  • 【EasyExcel】复杂导出操作-自定义颜色样式等(版本3.1.x)
  • 5个有效的华为(HUAWEI)手机数据恢复方法
  • HBase 开发:使用Java操作HBase
  • C++11——异常
  • 网络安全检测技术
  • python用哈希删除文件夹中重复的图片
  • linux配置动态ip
  • 网络--网络层协议--IP
  • ARM CCA机密计算安全模型之生态
  • hhdb数据库介绍(9-24)
  • SpringBoot 增量部署发布(第2版)
  • Leetcode 寻找峰值
  • flink StreamGraph 构造flink任务
  • Blender vs 3dMax谁才是3D软件的未来?
  • 【Unity踩坑】Unity编辑器占用资源过高
  • SSH公钥有什么用?Windows 11操作系统上如何获取SSH公钥
  • 厦门凯酷全科技有限公司正规吗?
  • 【设计模式】行为型模式(三):责任链模式、状态模式
  • 【Python模拟websocket登陆-拆包封包】
  • 优化装配,提升品质:虚拟装配在汽车制造中的关键作用
  • 悬浮框前端效果查看与造数
  • 硬件工程师之电子元器件—二极管(10)之可变电容和TVS二极管
  • 从0开始学PHP面向对象内容之常用设计模式(建造者,原型)