数学逻辑打印关于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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如