黑馬程式設計師——摺紙問題、九九乘法表和菱形圖案的列印
阿新 • • 發佈:2019-02-04
------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的實現
單層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(); } } }
/*
* 題目:打印出如下圖案(菱形)
*
***
*****
*******
*****
***
*
分析:
可以理解為先列印一個
*
***
*****
*******
再列印一個
*****
***
*
把中間*最多的行號定義為要列印的行數,即上圖要列印的菱形最寬處所在的行號為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();
}
}