顯示廣告
隱藏 ✕
看板 Programming
作者 Knuckles (阿德)
標題 Re:
 本來要出給學弟當練習的題目
時間 2010年11月12日 Fri. PM 04:27:25


※ 引述《abc1231qa》之銘言:
> 讓使用者輸入一個奇數
> 然後用*畫成正方形 一圈一圈的畫出
> 如下
N=9

改一下座標,(x,y)為(i,j)位移 -(N-1)/2 = -4

    0 1 2 3 4 5 6 7 8 →i
   -4-3-2-1 0 1 2 3 4 →x
 -4*********
 -3*       *
 -2* ***** *
 -1* *   * *
  0* * * * *
  1* *   * *
  2* ***** *
  3*       *
  4*********
 
 y

中間的*: (0,0)

第一圈*: |x|,|y|都小於等於2 且 |x|=2或|y|=2時 → |x|與|y|的最大值為2時

任一點(x,y): 設 r = max(|x|,|y|),若 r 為偶數,則該點為*

程式隨便寫寫
[code=cpp]
for(i=0;i<N;i++){
	
for(j=0;j<N;j++){
	
	
x = i - (N-1)/2;
	
	
y = j - (N-1)/2;
	
	
r = max(abs(x),abs(y));
	
	
if(r%2==0) cout << "*";
	
	
else       cout << " ";
	
}
	
cout << "\n";
}
其中 max(a,b) 為取a,b的最大值,abs(x)為取x的絕對值


--
※ 來源: Disp BBS 看板: Programming 文章連結: http://disp.cc/b/33-KkK
※ 作者: Knuckles  時間: 2010-11-12 16:27:25  來自: 111-248-4-134.dynamic.hinet.net
※ 看板: Programming 文章推薦值: 3 目前人氣: 0 累積人氣: 1020 
( ̄︶ ̄)b water5251 說讚!
1樓 時間: 2010-11-12 17:17:26 (台灣)
  11-12 17:17 TW
x=i-floor(N/2); y=i-floor(N/2);
2樓 時間: 2010-11-12 17:28:19 (台灣)
  11-12 17:28 TW
N確定是奇數的話-1就可以啦
3樓 時間: 2010-11-12 17:37:18 (台灣)
  11-12 17:37 TW
考慮到不同程式語言的特性,floor是最安全的做法
4樓 時間: 2010-11-12 18:17:41 (台灣)
  11-12 18:17 TW
其實我寫的時候有想到floor跟絕對值的問題 不過本來是要寫給大一看的 想說不要用這麼多東西 寫完才發現老師應該不會這樣考
5樓 時間: 2010-11-12 18:25:53 (台灣)
  11-12 18:25 TW
可是我覺得你那個落落長的程式更難看懂 XD
6樓 時間: 2010-11-12 18:31:03 (台灣)
  11-12 18:31 TW
這個題目比較偏向演算法而不是程式設計,重點是想出
if(max(abs(i-floor(N/2),abs(j-floor(N/2))%2) 這條試子
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇