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

相关文章

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#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

JAVA中while循环的使用与注意事项

《JAVA中while循环的使用与注意事项》:本文主要介绍while循环在编程中的应用,包括其基本结构、语句示例、适用场景以及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录while循环1. 什么是while循环2. while循环的语句3.while循环的适用场景以及优势4. 注意

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf