• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:‘*’をツリー状に表示しろという問題なんですが・・・。)

C言語でツリー状に'*'を表示する方法

このQ&Aのポイント
  • C言語でツリー状に'*'を表示する方法について教えてください。
  • 現在、左詰めでツリー状に'*'を表示していますが、問題の指示に従い、中央に表示する方法を知りたいです。
  • 教科書を見ても左詰めや右詰めの方法しか書かれていないため、中央に表示する方法がわかりません。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

最も簡単に、前に空白を入れてみた。 #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; }

drite
質問者

お礼

ありがとうございます! 自分のと比べてどこが違うか見てみます^^ ありがとうございました!

その他の回答 (1)

回答No.2

*の最大表示個数(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(' ');} }

関連するQ&A