本文主要是介绍打印实心菱形、空心菱形的简单方法(Java版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天在一个Java群看到有人说自己面试的时候曾经遇到过打印菱形的题目,就感觉挺有意思的,实际上这种题目完全可以用数学方法解决。
分析:
如图,若要打印一个菱形,设改菱形的中心坐标为(n,n),若平面内存在一点(x,y)
当|x-n|+|y-n|==n时,则该点在菱形的边线上
当|x-n|+|y-n|<n时,则该点在菱形内
当|x-n|+|y-n|>n时,则该点在菱形外
实心菱形(Java版)
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner cin=new Scanner(System.in);int n=cin.nextInt();for(int i=0;i<2*n-1;i++){for(int j=0;j<2*n-1;j++){if(Math.abs(n-i-1)+Math.abs(n-j-1)<n)System.out.print("*");elseSystem.out.print(" ");}System.out.println();}}
}
效果:
空心菱形(Java版)
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner cin=new Scanner(System.in);int n=cin.nextInt();for(int i=0;i<2*n-1;i++){for(int j=0;j<2*n-1;j++){if(Math.abs(n-i-1)+Math.abs(n-j-1)==n-1)System.out.print("*");elseSystem.out.print(" ");}System.out.println();}}
}
效果
对于该题而言,两层for循环也可以压缩成一层for循环,只需要手动将i转换成二维坐标,但是时间复杂度还是一样的…
如果只想输出n行,可以按照这个方法自行修改,不难
进阶:
如果想实现这种效果呢
稍微改编一下上面的代码即可
代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner cin=new Scanner(System.in);int n=cin.nextInt();for(int i=0;i<2*n-1;i++){for(int j=0;j<2*n-1;j++){System.out.print(Math.max(Math.abs(n-i-1),Math.abs(n-j-1)));}System.out.println();}}
}
这篇关于打印实心菱形、空心菱形的简单方法(Java版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!