1. 程式人生 > >黑馬程式設計師——摺紙問題、九九乘法表和菱形圖案的列印

黑馬程式設計師——摺紙問題、九九乘法表和菱形圖案的列印

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

摺紙問題:

/*
 * 	我國最高山峰是珠穆朗瑪峰:8848m,我現在有一張足夠大的紙張,厚度為:0.01m。
 請問,我摺疊多少次,就可以保證厚度不低於珠穆朗瑪峰的高度?
 分析:
 為了保證數字方便運算都乘以100
 因為不知道具體的迴圈次數,所以使用while迴圈
 定義統計變數count=0,每摺疊一次count自加一
 定義紙的初始厚度n=1,每迴圈一次厚度變為2n,直到紙的厚度不小於884800
 */
public class Paper_folding {
	public static void main(String[] args) {
		int count = 0;
		int n = 1;
		while (n < 884800) {
			n *= 2;
			count++;
		}
		System.out.println("摺疊" + count + "次後不低於珠峰的高度,此時的高度為" + n / 100 + "米。");
	}
}

列印九九乘法表
/*
 需求:在控制檯輸出九九乘法表。

 首先我們寫出九九乘法表:
 1*1=1
 1*2=2	2*2=4
 1*3=3	2*3=6	3*3=9
 1*4=4	2*4=8	3*4=12	4*4=16
 ...
 1*9=9	2*9=18	3*9=27	...

 我們先把這個九九乘法表看出是這樣的一個形狀:
 *
 **
 ***
 ****
 *****
 ******
 *******
 ********
 *********
 分析:
 使用巢狀迴圈:外迴圈決定行數,內迴圈決定列數
 發現列數又等於當前的行數
 */
public class Print99 {
	public static void main(String[] args) {
		//控制輸出9行
		for(int y=1;y<=9;y++){
			//每一行的列數等於當前的行號
			for(int x =1;x<=y;x++){
				//先打印出星星圖案,然後新增數字
				System.out.print(x+"*"+y+"="+x*y+"\t");
			}
			//每輸出一行後換行
			System.out.println();
		}
	}
}
類似問題:用*列印菱形圖案

巢狀for的實現

public class Prog19 {
	public static void main(String[] args) {
		int n = 4;
		printStar(n);
	}

	// 列印星星
	private static void printStar(int n) {
		// 列印上半部分
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < 2 * n; j++) {
				if (j < n - i)
					System.out.print(" ");
				if (j >= n - i && j <= n + i)
					System.out.print("*");
			}
			System.out.println();
		}
		// 列印下半部分
		for (int i = 1; i < n; i++) {
			System.out.print(" ");
			for (int j = 0; j < 2 * n - i; j++) {
				if (j < i)
					System.out.print(" ");
				if (j >= i && j < 2 * n - i - 1)
					System.out.print("*");
			}
			System.out.println();
		}
	}

}
單層for的實現
/*
 * 題目:打印出如下圖案(菱形)
    *
   *** 
  ***** 
 ******* 
  ***** 
   *** 
    * 
 分析:
 可以理解為先列印一個
    *
   *** 
  ***** 
 *******
 再列印一個
  ***** 
   *** 
    * 
 把中間*最多的行號定義為要列印的行數,即上圖要列印的菱形最寬處所在的行號為4
 設要列印的最寬處行號為n,則從上向中間,列印的*個數是2n-1,其他位置列印空格或不列印
 實現:

 用for控制列印的行數為n
 先列印上半部分
 先列印n-t個空格再列印2t-1個*
 再列印下半部分
 每行先列印t個空格,再列印2(n-t)-1個*

 */
public class Print {

	public static void main(String[] args) {
		// 寫一個方法實現
		int n = 4;
		printx(n);
	}

	private static void printx(int n) {
		// 先列印上部
		// 控制行數為n
		for (int t = 1; t <= n; t++) {
			// 先列印n-t個空格再列印2t-1個*
			int count1 = 0;
			do {
				if (t == n)
					continue; // 如果是最後一行則不列印空格,跳出此while迴圈
				System.out.print(" ");
				count1++;
			} while (count1 < n - t);

			int count2 = 0;
			do {
				System.out.print("*");
				count2++;
			} while (count2 < 2 * t - 1);
			System.out.println();
		}
		// 再列印下半部分
		// 控制行數為n-1
		for (int t = 1; t < n; t++) {
			// 每行先列印t個空格,再列印2(n-t)-1個*
			int count1 = 0;
			do {
				System.out.print(" ");
				count1++;
			} while (count1 < t);

			int count2 = 0;
			do {
				System.out.print("*");
				count2++;
			} while (count2 < 2 * (n - t) - 1);
			System.out.println();
		}
	}