dポイントプレゼントキャンペーン実施中!

‘*’をツリー状に表示しろという問題なんですが・・・。




#include<stdio.h>
int main(void){

int x,i;

for(x=1;x<=5;x+=2){
for(i=1;i<=x;i+=1){

putchar('*');
}
putchar('\n');
}
for(x=5;x<=10;x+=2){
for(i=1;i<=x;i+=1){

putchar('*');
}
putchar('\n');
}
for(x=7;x<=13;x+=2){
for(i=1;i<=x;i+=1){

putchar('*');
}
putchar('\n');
}
for(x=9;x<=17;x+=2){
for(i=1;i<=x;i+=1){

putchar('*');
}
putchar('\n');
}
return 0;
}

ツリーの数的にはこれでいいんですが、問題には「ツリー状」って書いてあるんですが
これでは左詰めになってしまいます。
しかし教科書をみても右詰めや左詰めしか書いてなく、
どうやって中央でそろえるのかわかりません。

お願いします。

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

ありがとうございます!

自分のと比べてどこが違うか見てみます^^

ありがとうございました!

お礼日時:2010/07/09 17:57

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!