- ベストアンサー
C言語でツリー状に'*'を表示する方法
- C言語でツリー状に'*'を表示する方法について教えてください。
- 現在、左詰めでツリー状に'*'を表示していますが、問題の指示に従い、中央に表示する方法を知りたいです。
- 教科書を見ても左詰めや右詰めの方法しか書かれていないため、中央に表示する方法がわかりません。お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最も簡単に、前に空白を入れてみた。 #include<stdio.h> int main(void){ int x,i; for(x=1;x<=5;x+=2){ /*以下3行追加*/ for(i=17;i>=x;i-=2){ putchar(' '); } for(i=1;i<=x;i+=1){ putchar('*'); } putchar('\n'); } for(x=5;x<=10;x+=2){ /*以下3行追加*/ for(i=17;i>=x;i-=2){ putchar(' '); } for(i=1;i<=x;i+=1){ putchar('*'); } putchar('\n'); } for(x=7;x<=13;x+=2){ /*以下3行追加*/ for(i=17;i>=x;i-=2){ putchar(' '); } for(i=1;i<=x;i+=1){ putchar('*'); } putchar('\n'); } for(x=9;x<=17;x+=2){ /*以下3行追加*/ for(i=17;i>=x;i-=2){ putchar(' '); } for(i=1;i<=x;i+=1){ putchar('*'); } putchar('\n'); } return 0; }
その他の回答 (1)
- nekomikekamo
- ベストアンサー率73% (71/97)
*の最大表示個数(17)から各行の出力個数を引いて2で割った数分スペースを 表示させればできそうです。 *が1の場合、(17-1)/2=8(8個分スペースを*の前に表示) *が3の場合、(17-3)/2=7 *が5の場合、(17-5)/2=6 繰り返しを少しだけ除去してみました。 #include<stdio.h> void make_tree(unsigned int start,unsigned int end,unsigned int step); void disp_tree(unsigned int length); void tree_format_center(unsigned int length); void print_space(unsigned int length); #define TREE_MAX 17 /* [*]の最大表示個数 */ int main(void){ make_tree(1, 5,2); make_tree(5,10,2); make_tree(7,13,2); make_tree(9,17,2); return 0; } void make_tree(unsigned int start,unsigned int end,unsigned int step){ while(start <= end){ disp_tree(start); start += step; } } void disp_tree(unsigned int length){ tree_format_center(length); while(length--){putchar('*');} putchar('\n'); } void tree_format_center(unsigned int length){ if(TREE_MAX <= length){return;} print_space((TREE_MAX - length)/2); } void print_space(unsigned int length){ while(length--){putchar(' ');} }
お礼
ありがとうございます! 自分のと比べてどこが違うか見てみます^^ ありがとうございました!