iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++实现蛇形矩阵的示例代码
  • 595
分享到

C/C++实现蛇形矩阵的示例代码

2024-04-02 19:04:59 595人浏览 薄情痞子
摘要

目录题目描述题解部分完整代码菜鸡蒟蒻想在博客中记录一些算法学习的心得体会,会持续更新C/C++方面的题解,方便理清思路和日后复习。如果还能结识一起敲代码的小伙伴的话就更好啦嘿嘿,因为

菜鸡蒟蒻想在博客中记录一些算法学习的心得体会,会持续更新C/C++方面的题解,方便理清思路和日后复习。如果还能结识一起敲代码的小伙伴的话就更好啦嘿嘿,因为实在是太弱了,肯定免不了错误百出。欢迎批评指正,期待共同成长!

题目描述

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

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

输入样例

输入

4

输出

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

题解部分

涉及算法模拟
各位读者有听说过“建模”一词吗?所谓“建模”,就是把事物进行抽象,根据实际问题来建立对应的数学模型。“抽象”并不意味着晦涩难懂;相反,它提供了大量的便利。计算机很难直接去解决实际问题,但是如果把实际问题建模成数学问题,就会大大地方便计算机来“理解”和“解决”。

思路

1.首先我们可以把题目抽象成数学问题,题目可以理解成为在一个方格里按一定规律填自然数,规律如下图。

画的丑各位轻喷

(画的丑各位轻喷)
可以看出"小蛇"的走向是右、下、左、上、反复循环。

2.建模完毕之后,我们可以把这个矩阵用二维数组来表示,每填一个数就相当于x或者y变化。
注意这个坐标系的建立是根据二维数组的特性建立的x代表行、y代表列。

int map[15][15];
//虽然题目要求数据最大是9*9,但为了避免内存会爆一般会把数组空间开大一点。
for(i=1;i<=n*n;i++)
map[x][y]=i;

3.那如何控制方向呢?其实只需要再定义一个二维数组就可以啦。

int pos[4][2]={
 		{0,1), //向右填数
 		{1,0},//向下填数
 		{0,-1},//向左填数
 		{-1,0}};//向上填数

注意顺序一定要按小蛇的走向规律填写。
为了方便大家理解,可以来看下面这张图,正好与上面的源码对应。

图片来源:《啊哈!算法》

通过这个方向数组,我们就很容易获得下一步的坐标。这里可以用tx,ty来表示。

int tx=x+t[d][0];
int ty=y+t[d][1];
///通过改变d来改变方向。

4.如何判断下一步要不要换方向呢?这时,tx,ty就派上用场了。
我们需要判断tx、ty是否超出边界,来决定是否转向。

for(i=1;i<=n*n;i++)
{
map[x][y]=i;
tx=x+pos[d][0],ty=y+pos[d][1];
if(tx>n||ty>n||tx<1||ty<1||map[tx][ty]>0)
	d=(d+1)%4;//因为只有四个方向所以d++时需要%4,使得d只能是0,1,2,3。
	x=x+pos[d][0],y=y+pos[d][1];//判断完毕后就可以知道下一步填哪啦。
}

矩阵的大小为n*n,故边界为[1,n]。
所以一旦tx,ty,超出边界,就需转向。
需要注意的是遇到之前已经填过数字的方格也需要转向。

ok核心部分已经讲解完毕,下面奉上完整代码。

完整代码

C语言

#include<stdio.h>
int map[15][15];//需要定义在全局变量,好处是初始化默认值都是0。
int pos[4][2]={0,1,1,0,0,-1,-1,0};
int main()
{
	int n;
	int i,j;
	scanf("%d",&n);
	int x=1,y=1,d=0;
	for(i=1;i<=n*n;i++)
	{
		map[x][y]=i;
		int tx=x+pos[d][0],ty=y+pos[d][1];
		if(tx>n||ty>n||tx<1||ty<1||map[tx][ty]>0)
		d=(d+1)%4;
		x=x+pos[d][0],y=y+pos[d][1];
	}
	for(i=1;i<=n;i++)
	{
	for(j=1;j<=n;j++)
	printf("%3D",map[i][j]);
	printf("\n");
	}
	return 0;
}

c++

#include<bits/stdc++.h>
using namespace std;
int map2[15][15];//因为c++类库太多,定义名为map编译器会产生歧义,所以在后面加个2就ok了。
int pos[4][2]={0,1,1,0,0,-1,-1,0};
int main()
{
	int n;
	cin>>n;
	int i,j;
	int x=1,y=1,d=0;
	for(i=1;i<=n*n;i++)
	{
		map2[x][y]=i;
		int tx=x+pos[d][0],ty=y+pos[d][1];
		if(tx>n||ty>n||tx<1||ty<1||map2[tx][ty])
		d=(d+1)%4;
		x=x+pos[d][0],y=y+pos[d][1];
	}
	for(i=1;i<=n;i++)
	{
	for(j=1;j<=n;j++)
	printf("%3d",map2[i][j]);
	cout<<endl;
	}
	return 0;
}

最近刚接触的c++,不过单从这题来看好像也差不多(捂脸)。

到此这篇关于C/C++实现蛇形矩阵的示例代码的文章就介绍到这了,更多相关C/C++ 蛇形矩阵内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C/C++实现蛇形矩阵的示例代码

本文链接: https://www.lsjlt.com/news/161827.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C/C++实现蛇形矩阵的示例代码
    目录题目描述题解部分完整代码菜鸡蒟蒻想在博客中记录一些算法学习的心得体会,会持续更新C/C++方面的题解,方便理清思路和日后复习。如果还能结识一起敲代码的小伙伴的话就更好啦嘿嘿,因为...
    99+
    2024-04-02
  • C/C++实现蛇形矩阵的示例代码怎么写
    这篇文章将为大家详细讲解有关C/C++实现蛇形矩阵的示例代码怎么写,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。菜鸡蒟蒻想在博客中记录一些算法学习的心得体会,会持续更新C/C++方面的题解,...
    99+
    2023-06-26
  • C++实现矩阵对称正交化的示例代码
    1.python代码 import numpy as np import pandas as pd df=pd.DataFrame() df['fac_01']=(34, 45,...
    99+
    2024-04-02
  • C语言线性代数算法实现矩阵示例代码
    目录C语言实现矩阵特殊矩阵特殊矩阵验证C语言实现矩阵 矩阵作为一个结构体而言,至少要包含行数、列数以及数据。 #include <stdio.h> #include ...
    99+
    2024-04-02
  • C++ LeetCode542矩阵示例详解
    目录LeetCode  542.01 矩阵方法一:广度优先搜索AC代码C++LeetCode  542.01 矩阵 力扣题目链接:leetcode.cn/pro...
    99+
    2022-12-16
    C++ LeetCode矩阵 C++ LeetCode题解
  • 详解C语言通过递归与非递归实现蛇形矩阵
    前言: 本次蛇形矩阵我将以两种方法来实现,即非递归和递归 非递归的实现: #define right 1 #define down 2 #define left 3 #defin...
    99+
    2024-04-02
  • C++实现关系与关系矩阵的代码详解
    目录ADT集合关系关系矩阵功能实现关系的矩阵表示关系的性质判断关系的合成参考:ADT 集合 template<class Type> //集合的元素类型 class...
    99+
    2024-04-02
  • python 共现矩阵的实现代码
    目录python共现矩阵实现项目背景什么是共现矩阵共现矩阵的构建思路共现矩阵的代码实现共现矩阵(共词矩阵)计算共现矩阵(共词矩阵)补充一点python共现矩阵实现 最近在学习pyth...
    99+
    2024-04-02
  • C语言实现简易贪吃蛇游戏的示例代码
    目录前言一、构造小蛇二、小蛇的移动三、控制小蛇移动四、判断游戏失败五、吃食物增加长度六、完整代码前言 实现一个经典的小游戏——贪吃蛇,如图所示。读者可以先自己...
    99+
    2022-11-13
    C语言贪吃蛇游戏 C语言贪吃蛇 C语言 游戏
  • C++使用cuBLAS加速矩阵乘法运算的实现代码
    本博客主要参考cuBLAS 库 词条实现,与原文不同的是,本博客: 将cuBLAS库的乘法运算进行了封装,方便了算法调用; 将原文的结果转置实现为了不转置,这样可以...
    99+
    2024-04-02
  • NumPy 矩阵乘法的实现示例
    NumPy 支持的几类矩阵乘法也很重要。 元素级乘法 你已看过了一些元素级乘法。你可以使用 multiply 函数或 * 运算符来实现。回顾一下,它看起来是这样的: m = n...
    99+
    2024-04-02
  • C++实现转置矩阵的循环
    目录前言一、思路分析二、代码实现1.转置矩阵函数2.调用函数实现转置矩阵总结前言 矩阵的转置主要考查我们对循环的使用,通过简单的循环结构,我们可以很方便的完成矩阵的转置。 一、思路...
    99+
    2024-04-02
  • C++矩阵运算的实现简单
    利用C++实现矩阵的构造,通过运算符的重载实现矩阵的乘法、加法等。并且实现矩阵形状的打印,矩阵的打印。 #include<iostream> #include<...
    99+
    2024-04-02
  • C语言实现简单的贪吃蛇游戏的示例代码
    目录运行效果代码一个简单的贪吃蛇游戏本来代码就不多,在保证可读性的情况下,很容易就控制在100以内了。 运行效果 代码 #include <Windows.h> #in...
    99+
    2023-01-12
    C语言实现贪吃蛇游戏 C语言贪吃蛇游戏 C语言贪吃蛇
  • C++实现MyString的示例代码
    MyString的构造、析构、拷贝构造、赋值运算 class String { char* str; public: String(const char* p = NULL) :...
    99+
    2024-04-02
  • C++实现LeetCode(73.矩阵赋零)
    [LeetCode] 73.Set Matrix Zeroes 矩阵赋零 Given a m x n matrix, if an elemen...
    99+
    2024-04-02
  • C++怎么实现螺旋矩阵
    本篇内容介绍了“C++怎么实现螺旋矩阵”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!螺旋矩阵Given a positive integer...
    99+
    2023-06-20
  • C++怎么实现矩阵赋零
    这篇文章主要介绍“C++怎么实现矩阵赋零”,在日常操作中,相信很多人在C++怎么实现矩阵赋零问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++怎么实现矩阵赋零”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-20
  • C++稀疏矩阵怎么实现
    这篇文章主要讲解了“C++稀疏矩阵怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++稀疏矩阵怎么实现”吧!稀疏矩阵矩阵与稀疏矩阵的定义Q:什么是矩阵A:数学上,一个矩阵由 m 行 ...
    99+
    2023-06-30
  • php代码如何实现矩阵
    这篇文章主要介绍php代码如何实现矩阵,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php代码实现矩阵的方法:首先取出行数和列数;然后在外层循环控制圈数;接着通过“j=i;j<col-i;j++;j<; ...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作