栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 洛谷练习题 · 蛇形方阵

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 洛谷练习题 · 蛇形方阵

首先要说明的是,这是一道很好的二维数组转向练习题,因此 不可能! 不会太水

题意解析

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

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

输入输出样例

输入#1:

4

输出#1:

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

可见,规律为:右 → 下 → 左 → 上

代码实现

定义输入不解释

#include 
using namespace std;
int cube[105][105];
int main ()
{
	int n,cnt=0,x=1,y=1; //cnt表示当前操作,x和y分别表示横纵坐标
	cin>>n; //输入
    return 0;
}

首先,把第一个数赋值为1

cube[1][1]=1; //赋值

然后,for循环填数

for(int i=1;i<=n*n;i++) {
	//...模拟代码
}

接下来,把每个点赋值

cube[x][y]=i; //赋值

最重要的来了,我们需要模拟每一种情况

模拟第一种情况(向右):

if(cnt%4==0 && y 

模拟第二种情况(向下):

else if(cnt%4==1 && x 

模拟第三种情况(向左):

else if(cnt%4==2 && y>1 && cube[x][y-1]==0) y=y-1; //y坐标更新

模拟第四种情况(向上):

else if(cnt%4==3 && x>1 && cube[x-1][y]==0) x=x-1; //x坐标更新

cnt更新代码

else {
	cnt++;
	if(cnt%4==0) y=y+1;
	else if(cnt%4==1) x=x+1;
	else if(cnt%4==2) y=y-1;
	else if(cnt%4==3) x=x-1;
}

最后,输出!

for(int i=1;i<=n;i++) {
	for(int j=1;j<=n;j++) {
		if(cube[i][j]>=10){ //判断是否为十位数
			cout<<" "<
			cout<<"  "< 

整合代码如下:

#include 
using namespace std;
int cube[105][105];
int main ()
{
	int n,cnt=0,x=1,y=1;
	cin>>n;
	cube[1][1]=1;
	for(int i=1;i<=n*n;i++) {
		cube[x][y]=i;
		if(cnt%4==0 && y1 && cube[x][y-1]==0) y=y-1;
		else if(cnt%4==3 && x>1 && cube[x-1][y]==0) x=x-1;
		else {
			cnt++;
			if(cnt%4==0) y=y+1;
			else if(cnt%4==1) x=x+1;
			else if(cnt%4==2) y=y-1;
			else if(cnt%4==3) x=x-1;
		}
	}
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			if(cube[i][j]>=10){
				cout<<" "<
				cout<<"  "< 


当然啦,还有一种方法,不建议大家使用:打表
代码就不放了,打表法太水了

总体来说,这道题还是一道不错的题,适合练习二维数组和循环


暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号