首页 > 其他分享 >1209. 回形方阵

1209. 回形方阵

时间:2024-11-04 21:19:35浏览次数:5  
标签:1209 递归 int else sh 回形 方阵 105

1209. 回形方阵

问题描述

输入 n 打印回形方阵。

输入

一个整数 n ( 0<n<10)

输出

一个方阵,每个数字的场宽为 2

样例

输入
8
输出
 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8
 8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8
 8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8
 8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8
 8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8
 8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8
 8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8
 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8
 8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8
 8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8
 8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8
 8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8
 8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8
 8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8
 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8
 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8

这里我用的语言是 C++。

首先来看一下题目和样例:

题目十分简洁,通过样例可以知道矩阵中心为0,而矩阵最外一圈则为n,一共要输出一个宽和长都为2n-1的方阵。并且每个数字的场宽为 2!!!

好,题目看完,看标签是递归,那我们今天就用递归来做。

(递归用函数来做,一般是函数长,主程序短)

代码:

#include<bits/stdc++.h>
using namespace std;
int a[105][105]={},i,j,n;
//这个整个名叫sh函数的作用就是用来给a[105][105]这个数组赋值,方便以后输出。
int sh(int s,int d,int x,int y){
	if(d==4){
		d=d%4;
		s--;
	}
	a[x][y]=s;
	if(s==0){
		return 0;
	}	
	else{
		if(d==0){
			if(y+1<=2*n+1&&a[x][y+1]==0){
				sh(s,d,x,y+1);//在自己的程序里面调用自己,就叫做递归。
			}
			else{
				sh(s,d+1,x+1,y);
			}
		}
		else{
			if(d==1){
				if(x+1<=2*n+1&&a[x+1][y]==0){
					sh(s,d,x+1,y);
				} 
				else{
					sh(s,d+1,x,y-1);
				}
			}
			else{
				if(d==2){
					if(y-1>=1&&a[x][y-1]==0){
						sh(s,d,x,y-1);
					}
					else{
						sh(s,d+1,x-1,y);
					}
				}
				else{
					if(x-1>=1&&a[x-1][y]==0){
						sh(s,d,x-1,y);
					}
					else{
						sh(s,d+1,x,y+1);
					}
				}
			}
		}
	}
}
int main(){
	cin>>n;
	sh(n,0,1,1);
	for(i=1;i<=2*n+1;i++){
		for(j=1;j<=2*n+1;j++){
			cout<<setw(2)<<a[i][j];
    //这个setw()就是用来设置场宽的,里面填几,后面输出的数字的场宽就是几,这里我们给它调成2。
		}
		cout<<"\n";
	}
}

今天这道基础题也就那样,简简单单!有其他方法就要向其它大佬请教啦!

每一份点赞、收藏、关注、评论,都将是我更新动力,点赞、收藏、关注、评论加起来过30,下一次就还做关于递归的,难度可是会提升到提高哦!

标签:1209,递归,int,else,sh,回形,方阵,105
From: https://blog.csdn.net/yuanheng418/article/details/143493740

相关文章

  • 洛谷P5731 【深基5.习6】蛇形方阵(Python)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言尝试一种没写过的解法。一、题目传送门https://www.luogu.com.cn/problem/P5731二、代码deffuc(i,j,cur,sign):#位置为(i,j),写下cur,方向为signglobaln,ansifcur>n*n:retur......
  • 螺旋方阵C++解法
    #include<iostream>#include<vector>usingnamespacestd;#include<iomanip>intn;intmain(){   cin>>n;   vector<vector<int>>arr(n,vector<int>(n,0));   intx=0,y=0,s=1;   while(s<=n*......
  • 编程算法 --- Polybius 方阵密码解密
      这段代码的作用是通过Polybius方阵密码的方式来解密一段只包含元音字母的密文。具体来说,它通过元音字母的全排列来生成多个可能的映射方案,然后将密文中的元音字母转换成数字序列,并根据这些数字对查找字母棋盘中的字母,尝试还原出可能的明文。程序会输出所有可能的明文,供人工......
  • C++递归——蛇形方阵
    #题目描述#———————————————————思考线—————————————————————#思路分析#其实这道题并没有想象中那么麻烦,我们只需要关注第一轮也就是最外圈是如何赋值的即可。重难点:1.每一个断点到底是应该哪一个循环赋值?2.每一次换行第一个......
  • 信奥一本通题陈老师解题:1209:分数求和
    ​【题目描述】【输入】第一行是一个整数nn,表示分数个数,1≤n≤101≤n≤10;接下来nn行,每行一个分数,用"p/qp/q"的形式表示,不含空格,p,qp,q均不超过1010。【输出】输出只有一行,即最终结果的最简形式。若为分数,用"p/qp/q"的形式表示。【输入样例】21/21/3【输出样例】5/......
  • 洛谷 P5731 蛇形方阵
    目录题目-蛇形方阵题目描述输入格式输出格式样例样例输入#1样例输出#1提示ACCODE思路ACCODE题目-蛇形方阵题目描述给出一个不大于9的正整数n,输出n×n的蛇形方阵。从左上角填上1开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用3个字符,前面......
  • CF1209E2 Rotate Columns (hard version) 题解
    CF1209E2给定\(n\timesm\)的矩阵,可以对每一列进行若干次循环移位,求操作完成后每一行的最大值之和的最大值。\(1\leqn\leq12,1\leqm\leq2000\)这里\(m\)很大,但有一个很重要的性质这\(m\)列中只有最大的前\(n\)个会对答案产生贡献因此我们直接就把......
  • 题解:CF1209E1 Rotate Columns (easy version)
    题目传送门题意给出一个\(n\timesm\)的矩阵,我们可以对每一列进行循环位移,不限次数,最后求每一行的最大值之和。\(1\leqn\leq4,1\leqm\leq100\)思路注意到\(n\)的范围很小,那么我们也可以缩小\(m\)的范围。正确的方案显然是取整个矩阵的前\(n\)大值,并且将它......
  • 洛谷P1209修理牛棚 Barn Repair
    [USACO1.3]修理牛棚BarnRepair题目描述在一个月黑风高的暴风雨夜,FarmerJohn的牛棚的屋顶、门被吹飞了好在许多牛正在度假,所以牛棚没有住满。牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。所有的牛棚有相同的宽度。宽度为1自门遗失以后......
  • C语言----设计魔方阵
    设计魔方阵实例说明:        魔方阵就是由自然数组成方阵,方阵的每个元素都不相等,且每行和每列以及主副对角线上的各元素之和都相等。实现过程:    1. 打开VisualC++6.0开发环境,新建一个C源文件,并输入要创建C源文件的名称。    2.引用头文件,代码......