正整数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 ...
随机推荐
- springboot返回数据null参数设为空字符串或空数组
package com.ruoyi.framework.config.ResponseVoConfig.WebConfig; /** * @Classname MyJsonMapper * @Desc ...
- java_web案例文件下载案例
目的:完成javaweb的文件下载 <!--如果想要一个a标签点击后不论文件类型,都需要弹出下载,保存框:--><!--我们就需要创建一个servlet,让这个a标签指向servle ...
- freertos内存pvPortMalloc 和 malloc 区别 ,以及全局变量占用情况
1.FreeRtos占用内存 #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) ) pvPortMalloc是从configTOTAL_ ...
- 数据对接:从Notion Database到低代码平台
前言 Notion简介 近几年,有一款叫Notion的产品异常火爆,它是集笔记.任务管理.Wiki.数据管理为一体的产品,他主打两个理念「模块化」和「All-in-one」,Notion最有魅力的还是 ...
- 进程间通信 —— 管道(Interprocess Communications —— Pipes)
进程间通信 -- 管道(Interprocess Communications -- Pipes) 管道分为匿名管道(anonymous pipes)和命名管道(named pipes.)两类, 其中 ...
- gitbook使用指南
一. node 下载 不要去node官网下载,那是最新版的,官方没提供旧版node.如果下载了最新版的还得下载一个管理node版本的工具,很麻烦且没必要. 在这个网站下载node:https://no ...
- 有趣的python库-MyQR
MyQR-个性二维码 基本使用 from MyQR import myqr import os myqr.run( words="hu qing nian ni zhen bang, you ...
- python压缩解压文件
转载CSDN坏菠萝:https://blog.csdn.net/abcwanglinyong/article/details/80840813
- 2013-12-2 ISBN号码
问题描述 试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包 ...
- 超声能指导持续临床缓解的长病程RA患者减停TNF抑制剂吗
标签:类风湿关节炎; TNF拮抗剂; 超声缓解; TNFi减停 超声能指导持续临床缓解的长病程RA患者减停TNF抑制剂吗 电邮发布日期: 2016年2月25日 截至目前,针对类风湿关节炎(RA),尚未 ...