作者adrianshum (Alien)
看板C_and_CPP
標題Re: [問題] 打星號畫圖
時間Wed Nov 4 11:31:14 2009
※ 引述《tokyobabylon (paris)》之銘言:
: 今天遇到一題在螢幕上show星號畫圖的問題
: *
: **
: ***
: 一般是使用兩個迴圈...
: for(int i=1; i<n;i++)
: fot(int j=1; j<=i;j++)
: cout<<"*";
: 但今天的題目是"限定只能用一個迴圈"
: so 單就這題來說是想到
: #include<iostream>
: #include<cstdlib>
: #include<string>
: #include<cstring>
: using namespace std;
: int main()
: {
: char a[]="*";
: for(i=0;i<3;i++)
: {
: cout<<a<<endl;
: strcat(a,"*");
: }
: system("pause");
: return 0;
: }
: 但有兩個問題
: 1.一開始宣告我若是宣告string a="*";
: 在strcat那邊就過不了...
: 2.如果反過來...
: ***
: **
: *
: 要怎麼做阿?
: 3.如果不用strcat這種方法
: 是否有其它較直觀的解法呢?
: (當然還是限定one-loop)
你當是 psuedo code 看好了 :P
char * LONG_STAR_STRING = new char[n+1];
memset(LONG_STAR_STRING, '*');
LONG_STAR_STRING[n] = '\0';
for (i = 0; i < n; i++) {
printf(LONG_STAR_STRING + n - i);
printf("\n");
}
delete[] LONG_STAR_STRING;
簡單來說就是弄一條夠長的 *******
然後每次靠 substring 來決定印出的長度
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
※ 編輯: adrianshum 來自: 202.155.236.82 (11/04 11:32)
推 VictorTom:果然有這種倒著來的方法出現了XD 11/04 11:32
推 dendrobium:這方法滿有趣的 11/04 11:38
推 ledia:+ i - 1 ? 11/04 11:43
→ adrianshum:+n - i 才對 XDD 現在改 11/04 14:48
※ 編輯: adrianshum 來自: 202.155.236.82 (11/04 14:49)
推 ledia:唉呀 我也昏了 ~_~ + i 不就是正階梯形了 11/04 14:58