首先要審題,1、控制台輸出菱形 2、每行是奇數個。
*
********
*******
*****
****
*****
******
*****
****
*******
*****
****
上圖是需要輸出的結果。
分析:如何構建乙個菱形?大體上分3步:
第一步:畫出乙個直角的梯形:
******
*******
********
*********
**********
***********
************
*************
**************
***************
****************
第二步:把該梯形的右下「腳」去掉!
******
*******
********
*********
**********
***********
**********
*********
********
*******
******
第三步:將左邊的部分*替換成空格:
*
********
*******
*****
****
*****
******
*****
****
*******
*****
****
通過以上三步即可構造成乙個菱形,問題解決。
下面說一下具體的思路。
第一步的實現:
這一步其實很簡單,首先根據傳入的奇數(number=11)來確定第一行要輸入的[星號]的個數(columnfirst),為columnfirst = (number/2) + 1;以下每一行加乙個[星號]即可,詳細**如下:
public
void
printdiamond(int number)
system.out.println();// 換行
}}
以上**即可實現輸出步驟一中的直角梯形。
第二步的實現:
從第一步到這一步需要發現一條規律,即:
****** 1
******* 2
*****
*** 3
*****
**** 4
*****
***** 5
*****
****** 6
*****
*****
**(2*1)=2 7
*****
*****
***2*2=4 8
*****
*****
****2*3=6 9
*****
*****
*****2*4=8 10
*****
*****
*****
*2*5=10 11
上圖中,第6行是整個菱形的中間,星號數量為11個,本來從第6行起,應該逐個遞減,每行遞減1個星號,可第7行(和第6行相比)卻多了乙個星號,這一多一少就是多了1x2=2個星號;第8行(和第6行相比)應該去掉2個星號,可現實是多了2個星號,這一多一少就是多了2x2=4個星號;第9行(和第6行相比)應該去掉3個星號,可現實卻是多了3個星號,這一多一少就是多了3x2=6個星號;以此類推。可以發現:從第7行開始,7減去中間值6等於1,8減去中間值6等於2,9減去中間值6等於3,以此類推,可以發現:(行數-中間值(6))乘以2即為需要去掉的右下「腳」。具體**如下:
public
void printdiamond(int number)
for (int column = 0; column < count; column++)
system.out.println();// 換行
}}
以上**即可實現輸出步驟二中的去掉直角梯形的右下「腳」。
第三步的實現:
從第二步到第三步還需要發現乙個規律,即:
******5 1
*******4 2
*****
***3 3
*****
****2 4
*****
*****1 5
*****
******0 6
*****
*****1 7
*****
****2 8
*****
***3 9
*******4 10
******5 11
上圖中,需要把左邊多餘的星號替換成空格,第一行需要替換錢5個空格,第二行需要替換前4個空格,第三行需要替換錢三個空格,以此類推,結合右邊的行數會發現:將第一行的行數1減去中間數6等於-5,取絕對值之後為5;第二行的行數2減去中間數6等於-4,取絕對值之後為4;…第七行的行數7減去中間數6等於1,取絕對值之後為1;第八行的行數8減去中間數6等於2,取絕對值之後為2;…第十一行的行數11減去中間數6等於5,取絕對值之後為5;以上規律可以發現:行數減去中間數然後取絕對值正好是當前行應該替換成空格的數量。,具體**如下:
public
void
printdiamond(int number)
int columnspace = math.abs(row - total);// 每行需要的空格數
for (int column = 0; column < count; column++) else
}system.out.println();// 換行
}}
最終控制台輸出結果為:
*
********
*******
*****
****
*****
******
*****
****
*******
*****
****
問題解決。
end
Java程式設計基本功 (七)輸出菱形 遞迴演算法。
第二十題 列印出如下圖案 行數為奇數n的菱形 就是下面這個樣子噠 public class lianxi20 system.out.println sum 下面是第二種方式,用遞迴的方法 因為分子,分母的規律就是斐波那契數列呀 public class lianxi23 system.out.pri...
1 4 輸出菱形
通過本題目的練習可以掌握c 中陣列的輸入輸出方法。從鍵盤輸入1個int型資料n,根據該資料,輸出乙個用組成的菱形,這個菱形中最多一行的的個數是所輸入的整數n。注意 第n行第乙個 號前有乙個空格。乙個整數n,表示最多的一行 的個數。output 輸出乙個由 組成的菱形。example input 5 ...
1 4 輸出菱形
problem description 通過本題目的練習可以掌握c 中陣列的輸入輸出方法。從鍵盤輸入1個int型資料n,根據該資料,輸出乙個用組成的菱形,這個菱形中最多一行的的個數是所輸入的整數n。注意 第n行第乙個 號前有乙個空格。input 乙個整數n,表示最多的一行 的個數。output 輸出...