![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
‘*’をツリー状に表示しろという問題なんですが・・・。
#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;
}
ツリーの数的にはこれでいいんですが、問題には「ツリー状」って書いてあるんですが
これでは左詰めになってしまいます。
しかし教科書をみても右詰めや左詰めしか書いてなく、
どうやって中央でそろえるのかわかりません。
お願いします。
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;
}
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラミングのペーパーテスト 実行結果の表示を答えてください #include <stdio.h> 2 2022/07/09 16:14
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
C++にてtemplateで受け取った任...
-
多重定義が起きている?--lnk20...
-
戻り値を返す関数の前に(void)...
-
C# Controls.Addで動的に配置し...
-
C# KeyDownイベントでショート...
-
コールバックって・・・
-
PICのプログラミングについて
-
静的でないメンバ関数の呼び出...
-
VC++でGetKeyboardStateがうま...
-
DLLの関数呼び出しで引数がある...
-
コンパイルエラー: LNK2001
-
C言語 プロトタイプ宣言
-
void main()って誰が最初?:AN...
-
gcc: incompatible pointer type
-
static constメンバ変数(配列)...
-
メンバ関数(メソッド)をマル...
-
C#でテンキーの操作は可能でし...
-
C言語 ① 5秒間 1秒間隔で点滅を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
Notepad++の関数リスト表示の変...
-
戻り値を返す関数の前に(void)...
-
ArduinoでMouse関数を使用して...
-
C++にてtemplateで受け取った任...
-
int main()、void main()、void...
-
多重定義が起きている?--lnk20...
-
C# KeyDownイベントでショート...
-
静的でないメンバ関数の呼び出...
-
VC++でGetKeyboardStateがうま...
-
C# Controls.Addで動的に配置し...
-
gcc: incompatible pointer type
-
void*型の配列について
-
const_castのつかいどころを教...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
(void)0 はどんな意味ですか
-
TimerProc コールバック関数を...
-
H8マイコンのシリアル通信につ...
-
DLLの関数呼び出しで引数がある...
おすすめ情報