Re: [問題] 如何用一個 for 印出星號菱形

看板java作者 (sbr)時間15年前 (2009/05/12 21:52), 編輯推噓7(704)
留言11則, 6人參與, 最新討論串1/2 (看更多)
※ 引述《pthuang (◢曉筱◤)》之銘言: : 這兩天被老師丟了一個問題 : 叫我們想該怎麼用一個 for 就印出星號組成的菱形 :   *    大概就是像這個樣子 :  ***    : *****  可以引入 Math 來使用(其他應該也可以啦 XD) :  ***    :   *    目前是想到從 -N 配合 Math.abs(絕對值)下手 : 但是怎麼想都覺得好像還是得用上兩個 for 才行呀 =口=" : 所以想來問問版眾們有沒有什麼比較好的想法 : (雖然老師後來說可以用兩個 for 啦.... :P) 以對角線長度為 5 來說,把菱形重心標為座標 (0, 0),那麼劃上 * 的位置 的座標會滿足 |x| + |y| <= 2。 以一個從 0 數到 24 的 loop 來做,你可以由 counter 來換算出座標,那麼就 可以使用一個 loop 來畫出這個圖形。 public class DiamondDemo { public static void main(String[] args) { int n = 5; if (args.length > 0) n = Integer.parseInt(args[0]); printDiamond(n, "*", " "); } public static void printDiamond(int diagonalSize, String dot, String space) { if (diagonalSize % 2 != 1) throw new IllegalArgumentException("diagonal size must be a odd number"); final int n = diagonalSize / 2; for (int i = 0; i < diagonalSize * diagonalSize; ++i) { int x = i % diagonalSize - n; int y = i / diagonalSize - n; if (Math.abs(x) + Math.abs(y) <= n) System.out.print(dot); else System.out.print(space); if (x == n) System.out.println(); } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.129.3 ※ 編輯: sbrhsieh 來自: 218.173.129.3 (05/12 21:55)

05/12 22:01, , 1F
大一我也遇過這題 那時還真的想不出來
05/12 22:01, 1F

05/12 23:15, , 2F
推好人一枚~
05/12 23:15, 2F

05/12 23:31, , 3F
這這這....真的是好人 =口=" 本來想說來問個想法就好
05/12 23:31, 3F

05/12 23:32, , 4F
想不到居然連原始碼都給我了 大感謝 那等等來問問題 XD
05/12 23:32, 4F

05/13 14:22, , 5F
太酷了!這讓我想起大一時地一堂軟體實驗課的經驗...
05/13 14:22, 5F

05/13 15:34, , 6F
現在剩下 int x 跟 int y 這兩行看不太懂
05/13 15:34, 6F

05/13 15:35, , 7F
是說....這到底是怎麼想出來的 難以理解 ~"~
05/13 15:35, 7F

05/13 15:37, , 8F
是不是有算法還是什麼的 囧">
05/13 15:37, 8F

05/13 17:58, , 9F
助教:嗯... 版上出現過的寫法,統統20分....
05/13 17:58, 9F

05/14 00:10, , 10F
有人可以跟我解釋一下那兩行嗎? T.T
05/14 00:10, 10F

05/14 01:09, , 11F
(i % diagonalSize,i / diagonalSize)是以左上角為原點
05/14 01:09, 11F
文章代碼(AID): #1A2NyX3B (java)
文章代碼(AID): #1A2NyX3B (java)