Java算法題-------菱形的打印及擴展(實心菱形、空心菱形、字母菱形)

實心菱形

輸入一個正整數M(1<=M<=25),表示菱形的半徑(直徑就是2*M+1)

輸出以M爲半徑的菱形(如圖)

代碼如下


	public static void main(String[] args) {
		Scanner s= new Scanner (System.in);
		int M =s.nextInt();
//		上半層
		for(int i =0;i<M+1;i++) {		//i表示層數
			for(int j=0;j<(M-i);j++) {	
				System.out.print(' ');
			}
			for(int k =0;k<2*i+1;k++) {
				System.out.print('*');
			}
			System.out.println();
		}
//		下半層
		for(int i =0;i<M;i++) {
			for(int j=0;j<i+1;j++) {
				System.out.print(' ');
			}
			int k =0;
			for(int j =0;j<2*(M-i)-1;j++) {
				System.out.print('*');
			}
			System.out.println();
		}
	}

將菱形分成上下兩部分,可以看成兩個三角形。用一個for循環來不斷地遍歷三角形的每一行,每一行中首先是空格的輸出,然後是*的輸出,每次找處空格和*的規律即可。

 

空心菱形


	public static void main(String[] args) {
		Scanner s= new Scanner (System.in);
		int M =s.nextInt();
//		上半層
		for(int i =0;i<M+1;i++) {		//i表示層數
			for(int j=0;j<(M-i);j++) {	
				System.out.print(' ');
			}
			System.out.print('*');
			for(int k =0;k<2*i-1;k++) {
				System.out.print(' ');
			}
			if(i!=0)
			System.out.print('*');
			System.out.println();
		}
//		下半層
		for(int i =0;i<M;i++) {
			for(int j=0;j<i+1;j++) {
				System.out.print(' ');
			}
			int k =0;
			System.out.print('*');
			for(int j =0;j<2*(M-i-1)-1;j++) {
				System.out.print(' ');
			}
			if(i!=M-1) {
				System.out.print('*');
			}
			System.out.println();
		}
	}

還是將菱形分爲上下兩部分,每一行先打印空格,然後打印一個*,然後在打印空格,然後在打印一個*。找出空格的打印規律即可。

 

字母菱形

打印如圖所示的菱形,最外一層是A,接着是B依次類推。。。。


	public static void main(String[] args) {
		Scanner s= new Scanner (System.in);
		int M =s.nextInt();
		
//		上半層
		for(int i =0;i<M+1;i++) {		//i表示層數
			for(int j=0;j<(M-i);j++) {	
				System.out.print(' ');
			}
			
			int k=0;
			for(int j=0;j<(i+1);j++) {
					System.out.print((char)('A'+k));
					k++;
			}
			k--;
			for(int j=0;j<(i+1)-1;j++) {
				k--;
				System.out.print((char)('A'+k));
		}
			System.out.println();
		}
		
//		下半層
		for(int i =0;i<M;i++) {
			for(int j=0;j<i+1;j++) {
				System.out.print(' ');
			}
			int k =0;
			for(int j=0;j<(M-i);j++) {
				System.out.print((char)('A'+k));
				k++;
			}
			k--;
			for(int j=0;j<(M-i)-1;j++) {
				k--;
				System.out.print((char)('A'+k));
			}
			System.out.println();
		}
	}

還是將菱形分爲上下兩部分,每一行中,先打印空格,然後打印字母,先是字母的遞增,然後遞減。只要將上面的空心菱形和實心菱形理解明白之後,就會很容易的理解這個,大家加油! 有任何疑問可以評論。

發佈了63 篇原創文章 · 獲贊 50 · 訪問量 9727
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章