正整数n型方阵
正整数n型方阵(不用数组完成)
一般呢这种n型方阵很多人都是用数组完成,今天呢小编就用简单的循环控制结构来完成,不需用到数组。
题目:
从键盘输入一个正整数n,根据n形成一个方阵。方阵最外层是第一层,每层上用的数字与层数相同。
如输入3,则方阵为:
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
题目规律:
(1)n型方阵有2n-1行,2n-1列
(2)在两层循环里i代表行,j代表列;n型方阵以第n行第n列为对称轴,上下左右四个角对称,这是很重要的规律。
(3)代码块分析
(对应代码块看比较清晰)
分为五大模块:
第一模块:第n行时的情况,第n行呢以第n列为中心,左右列上的数字对称,第n行第1到n列的输出,此时第几列上的数字为列数,j此时代表列,在j小于等于n的情况下j++输出了第n行第1~n列的情况;第n行第(n+1)到(2n-1)列的输出,j此时在这里代表列数,但又因为第(n+1) 到(2n-1)列上的数字跟第1到n列对称,所以要通过j的变换来得到第(n+1)到(2n-1)列上的数字,可是又不能影响j在这里代表的内循环,故下面的变量的t就有作用啦。
第二模块:第1到n行的情况,也是以第n列为中心,左右列上的数字对称,也就是说在同一行所对称的列数上的数字相等。
第1到n列的情况j代表列,i代表行,当列数大于行数时,输出i(行数号),也就是说此时i为这一列上对应方阵的数字, 当列数小于行数时,输出j(列数号),也就是说此时j为这一列上对应方阵的数字 。
第三模块:第1到n行第n到(2n-1)列的情况,为了方便确定第n到(2n-1)列上对应的方阵数字,在这里第n到(2n-1)列看成第(n-1)~1列,即从右边来看列数即这个时候在这个情况里从右边开始算起从第一列开始,所以此时j既代表列数又代表这一列所对应的方阵的数字。j代表列,i代表行,当列数大于行数时,输出i(行数号),也就是说此时i为这一列上对应方阵的数字 ;当列数小于行数时,输出j(列数号),也就是说此时j为这一列上对应方阵的数字。
第四模块: 第(n+1)到(2n-1)行第1到n列的情况。
第五个:第(n+1)到(2n-1)行第n~(2n-1)列的情况。
代码块:(对应代码解析)
import java.util.Scanner;
public class fanzheng { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input= new Scanner(System.in);
System.out.println("请输入一个正整数:");
int n=input.nextInt();//n型方阵有2n-1行,2n-1列
for(int i=1;i<2*n;i++){
//在两层循环里i代表行,j代表列;n型方阵以第n行第n列为对称轴,上下左右四个角对称。这是很重要的规律
if(i==n){//第n行时的情况,第n行呢以第n列为中心,左右列上的数字对称
for(int j=1;j<n+1;j++){
System.out.print(j+"\t");//第n行第1~n列的输出,此时第几列上的数字为列数,j此时代表列,在j小于等于n的情况下j++输出了第n行第1~n列的情况
}
for(int j=n+1;j<2*n;j++){
/*第n行第(n+1)~(2n-1)列的输出,j此时在这里代表列数,但又因为第(n+1)
* ~(2n-1)列上的数字跟第1~n列对称,所以要通过j的变换来得到第(n+1)~
* (2n-1)列上的数字,可是又不能影响j在这里代表的内循环,故下面的变量的t就有作用啦*/
int t=j;//将j的值先赋值给t,通过变量t来保存内循环for这里第几列的列数
int c=j-n;//j减去n代表此时第j列距离第n列的距离
j=n-c;
/*n减去c此时得到以第n列为对称轴右边第(n+1)~(2n-1)列对应到左边的那一列
* ,又因为对称的两列上的数字会相等并且第n行第1~n列上的数字刚好为第几列列数,
* 所以此时这里的j代表的是第n行右边也就是列数范围为(n+1)~(2n-1)的第t
* 列(也就是原来的第j列)上的数字*/
System.out.print(j+"\t");/*此时这里的j代表的是第n行右边也就是列数
范围为(n+1)~(2n-1)的第t列(也就是原来的第j列)上的数字,赶紧输出来*/
j=t;//将代表列数的t赋回给j;不影响内层循环for
}
System.out.println();//换行,因为此时第n行都全部输出了,就要及时换行
}
if(i<n){//第1~n行的情况,也是以第n列为中心,左右列上的数字对称,也就是说在同一行所对称的列数上的数字相等,
for(int j=1;j<n+1;j++){//第1~n列的情况
if(j>=i){
System.out.print(i+"\t");//j代表列,i代表行,当列数大于行数时,输出i(行数号),也就是说此时i为这一列上对应方阵的数字
}
else {
System.out.print(j+"\t");//j代表列,i代表行,当列数小于行数时,输出j(列数号),也就是说此时j为这一列上对应方阵的数字
}
} for(int j=n+1;j<2*n;j++){//第n~(2n-1)列的情况,下面的t,j,c的用法跟第n行第n~(2n-1)列的用法意思差不多一样
int t=j;
int c=j-n;
j=n-c;/*为了方便确定第n~(2n-1)列上对应的方阵数字,在这里第n~(2n-1)
列看成第(n-1)~1列,即从右边来看列数即这个时候在这个情况里从右边开始算起从第一列开始,所以此时j既代表列数又代表这一列所对应
的方阵的数字*/
if(j>=i){
System.out.print(i+"\t");//j代表列,i代表行,当列数大于行数时,输出i(行数号),也就是说此时i为这一列上对应方阵的数字
}
else{
System.out.print(j+"\t");//j代表列,i代表行,当列数小于行数时,输出j(列数号),也就是说此时j为这一列上对应方阵的数字
}
j=t;
}
System.out.println();
}
if(i>n){//第(n+1)~(2n-1)行的情况
for(int j=1;j<n+1;j++){//第1~n列的情况,下面的解释跟上面的一样结合第一第二个if的解释,因为以第n行第n列为对称轴上下左右对称
int f=i;
int c=f-n;
f=n-c;
if(j<=f){
System.out.print(j+"\t");
}
else{
System.out.print(f+"\t");
} }
for(int j=n+1;j<2*n;j++){//第n~(2n-1)列的情况,下面的解释跟上面的一样结合第一第二个if的解释,因为以第n行第n列为对称轴上下左右对称
int f=i;
int c=f-n;
f=n-c;
int t=j;
int g=j-n;
j=n-g;
if(j<=f){
System.out.print(j+"\t");
}
else{
System.out.print(f+"\t");
}
j=t;
}
System.out.println();
}
input.close();
}
}
}
输入正整数3运行结果:
正整数n型方阵的更多相关文章
- 2017.12.10《“剑锋OI”普及组多校联盟系列赛(14)#Sooke#Kornal 的课余时间 》分析报告
报告内容如下 - - [导语] ------ 太晚了,时间也紧,一切尽量从简吧 PS:本文题目来自剑锋OI 所以废话也不多说,进入正题吧,代码直接跟在题目后边儿,主要分析在代码前,次要的就写在代码后面 ...
- C#学习笔记(二十):C#总结和月考讲解
m1w1d2_console_variable_constant 输入Console.WriteLine(); 输出Console.ReadLine(); 快捷键 折叠代码:快捷键“Ctrl+ K + ...
- C#学习笔记(五):while循环和for循环
while循环 while循环和for循环,可以相互替换,范围和效能一样,理解事物的逻辑不一样 while循环用于条件不确定的逻辑 for循环用于计算次数的逻辑 for循环 快捷写法,按两下TAB i ...
- 求int型正整数在内存中存储时1的个数
题目描述: 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入例子: 5 输出例子: ...
- 华为oj之求int型正整数在内存中存储时1的个数
题目: 求int型正整数在内存中存储时1的个数 热度指数:4427 时间限制:1秒 空间限制:32768K 题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: ...
- 牛客网编程练习(华为机试在线训练)-----求int型正整数在内存中存储时1的个数
题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 示例1 输入 5 输出 2 P ...
- java笔试之求int型正整数在内存中存储时1的个数
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 关键点:n与二进制的1相与:判断最末位是否为1:向右移位. 类似题目是查找输入整数二进制中1的个数. package test; ...
- 求int型正整数在内存中存储时1的个数 && int型的数到底最大是多少?
输入一个int型的正整数(十位数之内!嘞!),计算出该int型数据在内存中存储时1的个数. #include<bits/stdc++.h> using namespace std; int ...
- 【华为机试】—— 15.求int型正整数在内存中存储时1的个数
题目 解法 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner ...
- 输入一个正整数n (1<n<=10),生成 1个 n*n 方阵 求出对角线之和
#define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <stdio.h> #include <std ...
随机推荐
- nexus私服搭建的上传和下载
下载 方法1 下载应该先在nexus中创建相关的库(宿主库.代理库.仓库组),也可以使用原有的库 随后在pom文件中增加以下代码,即可从私服中下载相关的依赖包(注:依赖包的下载首先基于本地库,本地库没 ...
- Salesforce LWC学习(四十二) getRecordNotifyChange已弃用
本篇参考: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.reference_get ...
- 数据存储单位、编程语言的发展史、python解释器版本、解释器的下载与安装、多版本共存、第一个python程序、pycharm下载
目录 一.数据存储单位 (1).简介 (2).换算单位 二.编程语言的发展史 (1).机器语言 (2).汇编语言 (3).高级语言 三.编程语言的分类 (1).编译型语言 (2).解释型语言 四.py ...
- 亲测有效! Studio One 6 V6.0.1 音乐编曲工具 含win/mac版
亲测有效! Studio One 6 V6.0.1 音乐编曲工具 含win/mac版 记录.生产.混合.掌握和执行所有操作.从工作室到舞台,Studio One6以易用为核心,是您的创意合作伙伴.当 ...
- Mockito单元测试 初试
Mockito单元测试相对于Spring Boot 自带的好处理在于,单元测试不需要加载注入Spring Boot 启动项目. 1.需要注入的东西如下,@InjectMocks是注入需要测试的类,@S ...
- CTF之WEB学习路线规划
前言 受大佬Lzer0Kx(公众号:LK安全)启发,打算整一篇关于CTF-web的学习路线的分享.当然也算是给一些刚入门的小白的一些学习方向,不至于不知道学啥.废话少说,开整! 以下的所有内容属于我个 ...
- [代码审计基础 15]phpmcs_v9.6 rce
PHP:5.4.5 设置调试:https://blog.csdn.net/m0_46641521/article/details/120107786 版本:phpcms_v9.6.0_UTF8 0x0 ...
- NOIP2021游记总结
\(\text{Day-1}\) 惨遭遣返······ 这真是伟大的啊!! \(\text{Day1}\) \(day\) 几好像没有意义,反正只有一天 \(\text{T1}\) 极致 \(H_2O ...
- Prufer序列 学习笔记
\(Prufer\) 序列 \(\texttt{definition}\) \(Prufer\) 序列序列可以将一个带标号 \(n\) 个结点的树用 \([1..n]\) 中的 \(n-2\) 个整数 ...
- ElasticSearch7.6入门
笔记记录 B站狂神说Java的ElasticSearch课程:https://www.bilibili.com/video/BV17a4y1x7zq 一.ElasticSearch概述 官网:http ...