Java演算法之輸出「菱形」

2021-07-23 01:18:53 字數 3561 閱讀 7061

首先要審題,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 輸出...