Java,回形数

         回形数基本思路:

        用不同的四个分支分别表示向右向下向左向上,假如i表示数组的行数,j表示数组的列数,向右向左就是控制j的加减,向上向下就是控制i的加减。

        

class exercise
{public static void main(String[] args){//回形数的实现Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[][] arr = new int[n][n];int x = n;//x和y是用来看还有多少列和行没被占用int y = n;//x表示列数,y表示行数int dir = 0;//dir用来控制方向int i = 0;//i和j用来控制数组列和行的赋值int j = 0;int count = 0;//count控制边界for (int a = 1; a <= n * n; a++)//产生1到n*n的数{if(dir % 4 == 0)//向右{arr[i][j] = a;j++;count++;if(count == x)//等于剩余的列数时就换方向{dir++;//换方向y -= 1;//行数减一i++;//设置下一个起点j--;//防止数组访问越界count = 0;//刷新count的值,用于下一次的方向的计数}}else if(dir % 4 == 1)//向下{arr[i][j] = a;i++;count++;if(count == y){dir++;//换方向x -= 1;//列数减一j--;//设置下一个起点i--;//防止数组访问越界count = 0;}}else if(dir % 4 == 2)//向左{arr[i][j] = a;j--;count++;if(count == x){dir++;y -= 1;i--;j++;count = 0;}}else if(dir % 4 == 3)//向上{arr[i][j] = a;i--;count++;if(count == y){dir++;x -= 1;j++;i++;count = 0;}}}for (int k = 0; k < arr.length; k++){for (int l = 0; l < arr[0].length; l++){System.out.print(arr[k][l] + "\t\t");}System.out.println();}}
}

         1.count是用来计算赋值的次数的,左右方向上,当赋值次数等于剩余列数时,就换方向。上下方向上,当赋值次数等于剩余行数时,就换方向。而x和y就是用来记录剩余的列数和行数的。

        2.换方向时,要把赋值的起点换一下,每次换起点都是让赋值对象变为下一个方向的下一个元素。如图:

         3.每次赋值到终点时,以第一次为例,最后还有一个j++,j会变为5,而接下来的向下应该时要保持j为4才行,j为5时会数组访问越界。所以要在后面的换方向的if里面加上一个j--,中和掉多余加出来的1.

        4.count要放在循环外面定义,防止count在循环内,被错误刷新。每次换方向时也要记得将count重新赋值为0,用于下一次的计数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/145769.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL UPDATE 语句(更新表中的记录)

SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录。 还可以使用AND或OR运算符组合多个条件。 SQL UPDATE 语法 具有WHERE子句的UPDATE查询的基本语法如下所示&#xff1a; UPDATE table_name SET column1 value1, column2 value2, ... WHERE conditi…

Redis入门概述

Redis入门概述 1.redis是什么 是一种存在内存中的数据库。遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库。并且可以提供提供多种语言的 API。提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。总结来说redis是基于内存…

pytorch 入门 (三)案例一:mnist手写数字识别

本文为&#x1f517;小白入门Pytorch内部限免文章 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参考文章&#xff1a;【小白入门Pytorch】mnist手写数字识别&#x1f356; 原作者&#xff1a;K同学啊 目录 一、 前期准备1. 设置GPU2. 导入…

【Solidity】智能合约案例——③版权保护合约

目录 一、合约源码分析&#xff1a; 二、合约整体流程&#xff1a; 1.部署合约&#xff1a; 2.添加实体&#xff1a; 3.查询实体 4.审核版权&#xff1a; 5.版权转让 一、合约源码分析&#xff1a; Copyright.sol&#xff1a;主合约&#xff0c;定义了版权局的实体&#xff…

YOLOv5项目实战(1)— 如何去训练模型

前言:Hello大家好,我是小哥谈。YOLOv5基础知识入门系列、YOLOv5源码中的参数超详细解析系列、YOLOv5入门实践系列、YOLOv5论文作图教程系列和YOLOv5算法改进系列学习完成之后,接着就进入YOLOv5项目实战系列了。🎉为了让大家能够牢固地掌握YOLOv5算法,本系列文章就通过一个…

Amazon图片下载器:利用Scrapy库完成图像下载任务

概述 本文介绍了如何使用Python的Scrapy库编写一个简单的爬虫程序&#xff0c;实现从Amazon网站下载商品图片的功能。Scrapy是一个强大的爬虫框架&#xff0c;提供了许多方便的特性&#xff0c;如选择器、管道、中间件、代理等。本文将重点介绍如何使用Scrapy的图片管道和代理…

星环科技向量数据库Transwarp Hippo1.1发布:一库搞定向量+全文联合检索,提升大模型准确率

星环科技向量数据库Transwarp Hippo自发布已来,受到了众多用户的欢迎,帮助用户实现向量数据的存储、管理和检索,探索和实践大模型场景。在与用户不断地深入交流以及实践中,Hippo迎来了V1.1版本,一套系统即可支持向量与全文联合检索,提高文本数据的召回精度,从而提升大语…

Object.getPrototypeOf()

1、作用 获取指定对象的原型&#xff08;内部​​[[Prototype]]​​属性的值&#xff09;&#xff0c;如果没有继承属性&#xff0c;则返回 null function Animal() {}var ani new Animal();console.log(ani);console.log(Object.getPrototypeOf(ani));2、注意 在 ES5 中&a…

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元回归预测。基于贝…

1600*C. Remove Adjacent(贪心字符串)

Problem - 1321C - Codeforces 解析&#xff1a; 贪心&#xff0c;从z到a遍历&#xff0c;每次循环减去符合题意的字符。 #include<bits/stdc.h> using namespace std; signed main(){int n;string s;cin>>n>>s;for(char iz;i>a;i--){for(int j0;j<s.…

64 最长公共子序列

最长公共子序列 题解1 DP 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的 最长公共子序列的长度。如果不存在 公共子序列&#xff0c;返回 0 。 一个字符串的子序列是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些…

计算机网路第3章-运输层

概述和运输层服务 运输层协议为运行在不同主机上的应用进程提供了逻辑通信&#xff0c;从应用程序角度看&#xff0c;通过使用逻辑通信&#xff0c;就好像运行在不同主机上的进程直接相连在一起一样。 运输层和网络层的关系 网络层提供主机之间的通信&#xff0c;而运输层提…