数组-螺旋形字符

c++回型方阵2 输入一个正整数 n,输出 n×n 的回型方阵。共 n 行,每行包含 n 个正整数,之间用一个空格隔开。一行一个正整数 n,2≤n≤9。注意:行末没有空格。 阅读详情

【题】

晕(选作)


看着这样的“回”形图案你晕吗?

让我们不用数组,来做出它。

输入:
    n。正方形的边长

输出:
    边长为 n 的数字回形方阵。

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 3↵
以文本方式显示
  1.   1  2  3↵
  2.   8  9  4↵
  3.   7  6  5↵
无限制 64M 0
测试用例 2 以文本方式显示
  1. 4↵
以文本方式显示
  1.   1  2  3  4↵
  2.  12 13 14  5↵
  3.  11 16 15  6↵
  4.  10  9  8  7↵
无限制 64M 0
测试用例 5 以文本方式显示
  1. 5↵
以文本方式显示
  1.   1  2  3  4  5↵
  2.  16 17 18 19  6↵
  3.  15 24 25 20  7↵
  4.  14 23 22 21  8↵
  5.  13 12 11 10  9↵
无限制 64M 0
【分析】
           为什么不能用数组实现呢??⊙﹏⊙b     直接计算出来?好吧,暂时没算出了,Coming soon。。。
  

【代码】
  暂时先用数组实现吧,结构很简单,注释写的很清楚,包括走的脚印都打印出来了。。。

#include "stdio.h"

#define MAX 101

int main(int argc, char **argv)
{
	int i, j, n = 4;
	int arr[MAX][MAX];
	int state = 0, num = 0;
	int flag_count = 0;     //记录当前点的四周有几个点不能走

	scanf("%d", &n);
	getchar();

	//初始化
	for (i = 0; i <= n+1; i++)
	{
		for (j = 0; j <= n+1; j++)
		{	
			//加围墙,-1
			if (i == 0 || i == n+1 || j == 0 || j == n+1)
			{
				arr[i][j] = -1;
				continue;
			}
			arr[i][j] = 0;
		}
	}

	//输出初始化后的矩阵
	printf("初始化后的矩阵:\n");
	for (i = 0; i <= n+1; i++)
	{
		for (j = 0; j <= n+1; j++)
		{			
			printf("%3d", arr[i][j]);
		}
		printf("\n");
	}

	printf("\n输出脚印:\n");
	i = 1; j = 1;
	while (1)
	{
		//如果四个方向都走过了,说明已经结束了
		if (flag_count == 4)
		{
			printf("此点四个方向都走过了,跳出。\n", i, j);
			break;
		}

		//如果碰到已走过的,或者围墙,则退一步。退一步其实是为了改变方向
		//其实这个点就是需要改变方向的点
		if (arr[i][j] != 0)
		{
			switch (state)
			{
			case 0:           //当前方向为右,向左退
				j--;
				break;
			case 1:           //当前方向为下,向上退
				i--;
				break;
			case 2:           //当前方向为左,向右退
				j++;
				break;
			case 3:           //当前方向为上,向下退
				i++;
				break;
			}
			//改变方向
			state = (state + 1) % 4;
			flag_count++;
			printf("改变方向的点:(%d, %d)\n", i, j, num);
		}
		else
		{
			arr[i][j] = ++num;
			flag_count = 0;
			printf("(%d, %d) = %3d\n", i, j, num);
		}		

		switch (state)
		{
		case 0:           //向右走
			j++;
			break;
		case 1:           //向下走
			i++;
			break;
		case 2:           //向左走
			j--;
			break;
		case 3:           //向上走
			i--;
			break;
		}
		
	}

	//输出结果
	printf("\n结果:\n");
 	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
		{			
 			printf("%3d", arr[i][j]);
		}
		printf("\n");
	}
	
	return 0;
}


【运行截图】




一张图带您看懂 用c语言打印回文图 阅读详情

相关推荐

C/C++ 多重循环练习:回型方阵

C/C++ 多重循环练习:回型方阵 题目描述 输入一个正整数n,输出n×n的回型方阵。 输入 一行一个正整数n,2≤n≤100。 输出 共n行,每行包含n个正整数,之间用一个空格隔开。 样例输入 5 样例输出 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 看完,你是不是有一点思路了呢?对的!这道题简单的很! 像铺地毯一样,一层层铺下去。 #include<iostream> using namespace std; int i,j,n,a[1

Tudou_Pika的博客 6233

晕

晕 看着这样的"回”形图案你晕吗?让我们不用数组,来做出它。 输入格式: n。正方形的边长 输出格式:"%3d" 边长为 n 的数字回形方阵。 测试用例1: 测试输入 3 测试输出 1 2 3↵ 8 9 4↵ 7 6 5↵ 测试用例2: 测试输入 4 测试输出 1 2 3 4↵ 12 13 14 5↵ 11 16 15 6↵ 10 9 8 7↵ #in...

SChenlyx 1373

算法题解 - 牛客编程巅峰赛S1第5场 - 黄金&钻石&王者组

算法题解,三道算法题均来自于牛客编程巅峰赛 S1 赛季第 5 场黄金组。分别涉及逆序对个数求解、哈希数组、前缀和、模拟等方法。

往西汪的编程小屋 1370

晕(北理工乐学平台作业题)

着这样的"回"形图案你晕吗?让我们不用数组, 来做出它。 输入: n。正方形的边长 输出: 边长为n的数字回形方阵。

m0_74603887的博客 872

C++回型矩阵

用C++编写的回型矩阵,任意输入一个数字,然后以回型矩阵的形式显示出来

ABAP调用启信宝API

方法参数定义如下 源代码如下 method qxb_http_get. data:lv_url type string. "===============初始化=============================================== "获取http实例 cl_http_client=>create_by_destination( exporting destination = space importing

u012232542的博客 1311

高级语言期末2007级B卷(计算机学院)

吉林大学高级语言期末2007级B卷

m0_56210953的博客 244

算法系列之十二:多边形区域填充算法--几种边标志填充算法

四、边界标志填充算法 在光栅显示平面上,多边形是封闭的,它是用某一边界色围成的一个闭合区域,填充是逐行进行的,即用扫描线逐行对多边形求交,在交点对之间填充。边界标志填充算法就是在逐行处理时,利用边界或边界颜色作为标志来进行填充的。准确地说,边界标志填充算法不是指某种具体的填充算法,而是一类利用扫描线连贯性思想的填充算法的总称。这类算法有很多种,本篇就介绍几种。 首先介绍一种以边为中心的边缘填充...

java开发指南博客 【转载】 1898

L1-5 回形针,yyds! (15分)

回形针,是一种回型的针。(废话 输入格式: 一行字符串,长度不超过1e4 输出格式: 将输入的字符串以螺旋状输出,使得输出呈现一个正方形(行数=每行字符数),要求该正方形在大小足以容纳该字符串的前提下尽可能小。若按指定方式填充后该正方形内有空缺,则空缺部分以空格填补。输出从左上角开始向右行进,遇到拐角即右转(示意图:回形针.png)。 输入样例: This is a test case. 输出样例: This casei .s t set a #include <iostream>

kuyelove 1215

阿里巴巴达摩院人工智能训练师(高级)

阿里巴巴达摩院人工智能训练师(高级)

huang0612123的博客 1万+

plotly包安装_Plotly(一)安装指南

plotly,是一个快速完善并崛起的交互式的、开源的绘图库库,Python库则是它的一个重要分支。现已支持超过40种独特的图表类型,涵盖了广泛的统计、金融、地理、科学和三维用例。Plotly 通过JavaScript构建,能基于Web显示实现交互式的可视化效果(Plotly最强大之处之一)。所以它的图形呈现可以方便的显示于Jupyter notebook(基于html)、独立的html中(直接显示...

weixin_35907189的博客 3471

2021-11-09蓝桥杯真题DNA

时间限制: 1Sec 内存限制: 128MB 提交: 11288 解决: 3954 题目描述 小强从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, 小强上中学了,接触到了神圣的名词--DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮,“要是能画出来就好了” 小强喊道。现在就请你帮助他吧 输入 输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=

guuuuug的博客 185

Cadence17.4 Allegro PCB制板(gerber / 光绘)文件输出的顺序及注意点

Cadence Allegro PCB制板文件输出 (gerber 光绘文件输出)

weixin_45331044的博客 1万+

每日一题|算法|三种蛇形排序|什么才是真正的简洁高效啊(战术后仰)

最近正在看紫书,经典不愧为经典,这本书中简洁、高效、一针见血而又不失可读性的代码,让笔者看得大呼过瘾,这才是真正的编程思维,之前写的那坨简直就是屎山。正好看到了蛇形排序这一题目,看到网上的三种排序,笔者也想动动手,尝试使用紫书中的编程风格,将代码敲出来。此文章图片部分引用自,在此基础上大幅优化代码。

2301_79895143的博客 2825

从高德、百度地图下载POI数据?用这个工具5分钟搞定GCJ02/BD09到WGS84的坐标纠偏

本文详细解析了高德、百度地图POI数据坐标偏移问题,并提供了从GCJ02/BD09到WGS84的高效转换方案。通过开源工具如coordtransform和ArcGIS等专业软件,实现毫米级精度的坐标纠偏,适用于商业选址、GIS分析等场景,显著提升数据准确性和工作效率。

weixin_26789847的博客 448

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读

码农研究僧的博客 1727

顺时针打印矩阵题解(文末附完整代码,自己敲#include这句 和最后return 0 后面的空格中也有不能识别的字符 删掉就行了)

所以 数组的行下标 i >= 1+hang 开始(因为hang初始值为0,螺旋一圈后会自增1,恰好满足我们的要求)所以数组的列下标 i 从 lie 开始, (因为lie初始值为0,螺旋一圈后会自增1,恰好满足我们的要求)数组的行下标 i 为 n-1-hang (因为hang初始值为0,螺旋一圈后会自增1,恰好满足我们的要求)所以数组的列下标是 n-1-lie (因为lie初始值为0,螺旋一圈后会自增1,恰好满足我们的要求)的定义),即数组的行下标 i 从 hang+1 开始,

zl_dfq的博客 1347

CloudCompare 二次开发:插件中的 PCL 环境配置与编程

在进行 CloudCompare 的二次开发过程中,我们常常需要使用点云库(Point Cloud Library,简称 PCL)来处理和分析点云数据。在 CloudCompare 的界面中,选中一个点云对象,然后点击菜单栏中的 “插件” -> “MyPluginAction”。插件将对选中的点云对象进行体素滤波处理,并更新显示结果。下面我们将展示一个简单的插件编程示例,该示例使用 PCL 对输入的点云数据进行体素滤波处理。方法进行体素滤波处理,并将结果点云赋值给选中的点云对象。文件并点击 “打开”。

2301_79331387的博客 283

C++二维数组编程实战:解析“鲜花方阵”算法与调试技巧

二维数组是编程中处理矩阵、网格数据的基础数据结构,广泛应用于图像处理、游戏地图、科学计算等领域。其核心原理是通过行和列的索引来定位和操作元素,通常使用嵌套循环进行遍历。掌握二维数组的操作对于理解更复杂的数据结构和算法至关重要,能有效提升解决实际工程问题的能力。在算法竞赛和入门编程中,二维数组常被用来模拟和输出特定图案,例如空心方阵、对角线填充或棋盘格等,这有助于锻炼逻辑思维和代码实现能力。本文以“鲜花方阵”为例,深入探讨了二维数组的遍历、条件判断及空间优化,并分享了常见的调试技巧与边界情况处理,为初学者提供

weixin_30565327的博客 416

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

BFS与方向数组:迷宫寻路算法实战解析

广度优先搜索(BFS)是图论中的基础算法,通过队列实现分层遍历,保证首次到达目标节点的路径即为最短路径。其核心原理是利用先进先出的特性系统性地探索解空间,时间复杂度为O(V+E)。在路径规划类问题中,BFS常配合方向数组使用,后者通过预定义移动向量简化代码逻辑并提升可维护性。这种组合在游戏AI、机器人导航等场景有广泛应用,特别是需要保证路径最优性的场合。算法竞赛中常见优化技巧包括双向BFS和A*启发式搜索,而方向数组的实现则直接影响代码的简洁性与扩展性。本文以迷宫问题为例,详解如何将BFS与方向数组结合,解

weixin_30580341的博客 434

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝桥杯C/C++真题刷题攻略:从“猜生日”到“蛇形填数”,这5类题最容易拿分

本文深度解析蓝桥杯C/C++竞赛中最易拿分的五大高频题型,包括日期处理、数学模拟、字符串操作、数组/矩阵和逻辑推理题。通过实战代码示例和解题技巧,帮助选手快速掌握核心算法,如日期推算、蛇形填数等,提升竞赛得分效率。特别适合准备蓝桥杯的C/C++程序员参考学习。

weixin_30764883的博客 494

螺旋矩阵和大精度整数加法

1、螺旋矩阵的简单实现 由左上角为1时的顺时针向中心螺旋 代码如下`#include <stdio.h> int main(void) { int i, j, k, n, num = 1; int a[10][10] = {1}; scanf("%d",&n); for(k = 0;k < n/2;k++) { for(i = k;i <= n-k-1;i++) { a[k][i] = num++; } for(j = k + 1;j < n-k-1;j++

weixin_52356220的博客 165

计算机复试学习笔记 Day27【补】

摘要:本文包含三个编程题解。79题实现由内向外逆时针螺旋填充矩阵,注意输出格式要求;80题通过三重循环暴力枚举三种饲料配比,寻找符合目标比例的最小份数组合;81题直接计算浮点数字符串中小数点后的位数。解题思路包括:使用方向数组模拟螺旋路径、交叉相乘比较比例避免浮点误差、字符串处理解决double精度问题。易错点包括输出格式控制、整数倍验证和长度计算偏移。代码均采用C++实现,包含详细注释和边界处理。

weixin_61039756的博客 586

蓝桥杯国赛必备:蛇形填数算法精解与方向数组实战

在算法竞赛和编程实践中,矩阵操作是处理二维数据的核心基础。其原理在于通过行、列索引精确控制数据在二维空间中的访问与修改,这是实现复杂逻辑的基石。掌握矩阵操作的技术价值在于,它能高效解决路径规划、图像处理和动态模拟等实际问题。例如,在蓝桥杯等算法竞赛中,经典的“蛇形填数”问题就是矩阵遍历的典型应用场景。该问题要求按照特定螺旋顺序填充矩阵,它深刻考察了选手对坐标变换、边界处理和状态切换的理解。本文将以“蛇形填数”为切入点,深入剖析其背后的**方向数组法**这一通用解题模型,并探讨其**数学规律**解法,帮助读者

weixin_34228387的博客 471

[ACM]螺旋

Problem Description 现在有一个二维的字符数组,要求你从左上角开始,顺时针前进,按照螺旋形输出经过的字符,每个位置只会经过一次,直到走完整个矩阵,例如: 字符矩阵如下: abc  def ghi 从左上角a开始,按照顺时针,经过a b c f i h g d 然后向右转 到 e 于是输出为:abcfihgde Input 输入的第一行为一个整数T,代

yuchenchenyi的博客 547

【题目28】一些简单题的算法练习题(2)

声明:这些题目都是从互联网上搜集而来,有些解法属于原创,有些解法属于网友的智慧,从博客上找来的解法都会给出链接,论坛上的讨论就不给出链接了。 1. 不用中间变量,实现strlen函数。(strlen为C语言中求给字符串长度库函数) int strlen(const char *str) 解法比较明显,不让用临时变量,那就用递归了。int strlen(const char

心有林夕 1276
上一篇: 数组-子数整除
下一篇: 数组-排序-邮票组合
NoNeil
博客等级 码龄15年 108粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值