※ 引述《vm6jp6rmp4 (Jun)》之銘言:
: 今天看書看到了一個題目,畫三角形,想了一個多小時想不出來怎麼畫,圖形如下,
: *
: ***
: *****
: 可不可以問一下,我的高是三,如果我要我的高度可以輸入,有什麼比較好的寫法嗎?
: 如果光用指標可以畫嗎?還是一定要用陣列~~~這種畫圖的難度算高嗎?
數學課時想到的白爛做法 //有用到陣列喲 XD
把每一行的星星想成數字的二進位信號
那麼下一行就是前一行的 左移 與 右移 的 OR 運算結果
不過第二行例外
不過這個方法到 層數 >= 32 時就會爆炸 //連 long long 也放不下
#include <stdio.h>
int main (void) {
int n, m, i, j;
printf("請輸入層數: (0 < n < 30) :");
scanf("%d", &n);
m = 2*n -1; //最後一排有幾個'*'
long long bit[n]; //懶的作 malloc 就直接用 c99 的 vla
for (i = 0; i < n; i++) {
bit[i] = 0;
}
bit[0] = 1<<(m/2); //中間的那顆
for (i = 1; i < n; i++) {
bit[i] = (bit[i-1]<<1) | (bit[i-1]>>1) | bit[i-1];
}
for (i = 0; i < n; i++) {
for (j = m-1; j >= 0; j--) { //檢查每一位元若為真就印出星星
putchar( ( (bit[i]>>j) &1 ) ? '*':' ');
}
puts(""); //換行
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.60.107.233