[問題] 一題C++的圖形問題

看板C_and_CPP作者 (FreeBlizzard)時間11年前 (2012/10/21 13:40), 編輯推噓5(507)
留言12則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Microsoft VisualC++ 2010 Express 問題(Question): 有點沒有頭緒... 餵入的資料(Input):N 輸入n >= 4 預期的正確結果(Expected Output): 輸入 n 產生以下圖形: 4 A A ABA ABA ABCBA ABCBA ABCDCBA ABCDCBA ABCDCBA ABCDCBA ABCBA ABCBA ABA ABA A A 5 A A A ABA ABA ABA ABCBA ABCBA ABCBA ABCDCBA ABCDCBA ABCDCBA ABCDEDCBA ABCDEDCBA ABCDEDCBA ABCDEDCBA ABCDEDCBA ABCDCBA ABCDCBA ABCBA ABCBA ABA ABA A A 6 A A A ABA ABA ABA ABCBA ABCBA ABCBA ABCDCBA ABCDCBA ABCDCBA ABCDEDCBA ABCDEDCBA ABCDEDCBA ABCDEFEDCBA ABCDEFEDCBA ABCDEFEDCBA ABCDEFEDCBA ABCDEFEDCBA ABCDEFEDCBA ABCDEDCBA ABCDEDCBA ABCDEDCBA ABCDCBA ABCDCBA ABCDCBA ABCBA ABCBA ABCBA ABA ABA ABA A A A 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> #include <iomanip> using namespace std ; int main(){ int i ; int j ; int n;/*階乘數*/ cout << "請輸入一個大於等於4的整數n以印出上階層為n的菱形:"; cin >> n; if(n>=4){/*判斷n是否大於等於4*/ for( i=0 ; i<n ; ++i) {/*畫出菱形的上半部,外迴圈1*/ for( j = n - i - 1 ; j > 0 ; --j ){ cout << " " ; } for( j=0 ; j < 2 * i + 1 ; ++j ){ cout << static_cast<char>('A' + j); } cout << endl; } for(i = 0; i< n - 1 ; ++i){/*畫出菱形的下半部,外迴圈2*/ for( j=0 ; j < i + 1 ; ++j){ cout << " "; } for( j=0 ; j < 2*(n-i)-3 ; ++j){ cout << static_cast<char>('A' + j); } cout << endl; } } else{ cout << "ERROR!" << endl << "請重新輸入一個大於等於4的整數n" << endl; } system("pause"); return 0; } ---------------------------------------------------------------------------- 個人的一些想法: 題目的三角形是以第一行A 第二行ABA 第三行ABCBA .....的順序去印的 而我想了半天最多也只能寫到第一行A 第二行ABC 第三行ABCDE ....(上面的code) 我覺得有字母的上半部可能是一半印A 另一半印* AB **A ABC ***BA ABCD ****CBA 然後再設兩個變數 k(控制上三角),l(控制下三角) if(k%2==1){印出字母} else{印空白};if(l%2==0){印出空白}else{印出字母} 雖然個別寫可能可以...不過全部併起來之後讓我有一點沒頭緒... 還請各位大大幫忙 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.189.59 ※ 編輯: free94531 來自: 114.32.189.59 (10/21 13:46)

10/21 16:02, , 1F
先簡化問題看看?我建議把他當作有座標的畫布
10/21 16:02, 1F

10/21 16:03, , 2F
看會簡單很多
10/21 16:03, 2F

10/21 16:17, , 3F
配置矩陣把東西填入再印出來這樣比較好懂
10/21 16:17, 3F

10/21 19:11, , 4F
這個問題問的非常好!
10/21 19:11, 4F

10/21 20:22, , 5F
先用星星畫出n個菱形,再把沒有用的三角形去掉
10/21 20:22, 5F

10/21 20:23, , 6F
最後再把星星換成ABCD
10/21 20:23, 6F
可是我不知道菱形和菱形間的空白怎麼處理ㄟ....@@ ※ 編輯: free94531 來自: 114.32.189.59 (10/21 21:42)

10/21 21:58, , 7F
先試看看畫出連在一起的n個菱形看看
10/21 21:58, 7F

10/21 22:35, , 8F
一張畫布, 全部都是空白字元, 只需要達成在畫布裡畫出
10/21 22:35, 8F

10/21 22:36, , 9F
"全部含有某字元 c 的(倒)三角形" 即可, 以 n = 4 來
10/21 22:36, 9F

10/21 22:37, , 10F
說只是 A B C D, 4 個三角形疊上去而已, 只要依序呼叫
10/21 22:37, 10F

10/21 22:38, , 11F
寫好的函式就可以, 最後再將畫布印出來, 也就不用考慮
10/21 22:38, 11F

10/21 22:38, , 12F
那麼多間隔的問題了, 畫布實際上是好幾條字串所組成
10/21 22:38, 12F
恩恩 謝謝各位大大的回答喔~! ※ 編輯: free94531 來自: 114.32.189.59 (10/25 23:33)
文章代碼(AID): #1GWuh7-X (C_and_CPP)