数学逻辑打印关于for循环打印特殊图形《Blind-Stab》

2023-10-18 18:20

本文主要是介绍数学逻辑打印关于for循环打印特殊图形《Blind-Stab》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在回顾基础内容,发现关于for循环打印图形这一块其实有点东西,并且可以的到一个经验与一个总结!

如题:键盘录入一个N,当N = 5时,打印的图形如下,请给出常规代码。

分析:其实像这种for循环打印特殊图形的问题其实大部分都是数学问题,需要编者自己去找规律;

 因为该图形不是单纯的递增或递减,所以可以用四个for循环,两两分开,分别打印上部分和下部分,如下:

public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入N:");int N = scanner.nextInt();for (int i = 1; i <= N; i++) {for (int j  = 1; j <= i; j++) {System.out.print("*");}System.out.println("");}for (int i = N - 1; i >= 1; i--) {for (int j = i; j >= 1; j--) {System.out.print("*");}System.out.println("");}}
}

但是很明显,用四个for循环太low了,而且时间复杂度空间复杂度有浪费。那我们就改: 

public class Home001 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入行数:");int N = scanner.nextInt();for (int i = 1; i < 2*N;i++) {//			for (int j = 1; j <= i && j <= 2*N - i; j++) {
//				System.out.print("*");
//			}for (int j = 1; j <= N - Math.abs(N-i); j++) {//在这里,N-Math.abs(N-i)的最大值就是NSystem.out.print("*");	//不会因为上面2*N的改变而改变。}System.out.println("");}}
}

 针对上面代码的第二层循环注释与非注释部分,非常巧妙。N - Math.abs(N-i) 其实就等于 j <= i && j <= 2*N - i;   因为把绝对值去掉就会变成又边的式子。

如题:键盘录入一个N,当N = 5时,打印的图形如下,请给出常规代码。

代码如下:

同理:

public class Home002 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入行数:");int N = scanner.nextInt();for (int i = 1; i < 2*N; i++) {
//			for (int k = 1; k <= Math.abs(N-i) ; k++) {
//				System.out.print(" ");
//			}
//			for (int j = 1; j <= N - Math.abs(N-i); j++) {
//				System.out.print("*");
//			}
//			System.out.println("");for (int k = 1; k <= N - i || k <= i - N; k++) {System.out.print(" ");}for (int j = 1; j <= i && j <= 2*N - i; j++) {System.out.print("*");}System.out.println("");}}
}

如题:键盘录入一个N,当N = 5时,打印的图形如下,请给出常规代码。

代码如下:

public class Home003 {public static void main(String[] args) {Scanner scanner  = new Scanner(System.in);System.out.print("请输入行数:");int N = scanner.nextInt();for (int i = 1; i < 2*N ; i++) {for (int j = 1; j <= N - i || j <= i - N; j++) {System.out.print(" ");}System.out.print("*");for (int k = 1; k <= 2*N-3 - Math.abs(2*N - 2*i); k++) {System.out.print(" ");}if(i>1&&i<2*N-1) {System.out.print("*");}System.out.println("");}}
}

如题:键盘录入一个N,当N = 5时,打印的图形如下,请给出常规代码。

分析:其实这个就只是第二个的变体,直接在  *  旁边空出一个空格就行,代码如下:

public class Home002 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入行数:");int N = scanner.nextInt();for (int i = 1; i < 2*N; i++) {
//			for (int k = 1; k <= Math.abs(N-i) ; k++) {
//				System.out.print(" ");
//			}
//			for (int j = 1; j <= N - Math.abs(N-i); j++) {
//				System.out.print("*");
//			}
//			System.out.println("");for (int k = 1; k <= N - i || k <= i - N; k++) {System.out.print(" ");}for (int j = 1; j <= i && j <= 2*N - i; j++) {System.out.print("* ");}System.out.println("");}}
}

总结:其实用※形打印各种对称的图形的关键是数学问题,常说的找规律,并且边缘与内部同时考虑,把边缘部分当成一条线,设法模拟求出该线的方程,在进一步进行求解。同时关于对称很多时候用到绝对值,关键是要找到其特殊点和位置。

这篇关于数学逻辑打印关于for循环打印特殊图形《Blind-Stab》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234348

相关文章

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约