合計 昨日 今日

中空が存在する3角形について

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: ss.8109
[URL]
Date: 2017年11月09日(木) 11:20
No: 1
(OFFLINE)

 中空が存在する3角形について

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h>
main()
{
    int n,tate,yoko;
    printf("整数を入力せよ:");
    scanf_s("%d", &n);
    for (tate= n/2;tate>=0; tate--)
    {
        for (yoko = 1; yoko<=tate; yoko++)
        {
            printf(" ");
        }
        for (yoko = 1; yoko <= n - tate* 2; yoko++)          /*辺と中空部分について*/
        {
            if (yoko == 1 || yoko == n - tate * 2 || tate == 0)
            {
                printf("*");
            }
            else
            {
                printf(" ");                  /*中空部分*/
            }
        }
        printf("\n");
    }
}


実行結果
整数を入力せよ:9
*
* *
* *
* *
*********
(ずれているように見えますが一応合ってます)

具体的に何がわからないかというと、空白部分の考え方が一番わかりません。
そのほかにも全体的にどのようなプロセスで解けばいいのかわからないのですが、少しでも協力していただけたら嬉しいです。

Name: shika
[URL]
Date: 2017年11月10日(金) 21:22
No: 2
(OFFLINE)

 Re: 中空が存在する3角形について

tate, tate+1, ................., n-tate
" "...." ", "*", " "............" ",   "*"
1, ................., n-tate-tate
と言った具合に、空白を先に出力している為、tateを1から数え直している様ですが、
全てを、tateだけずらす為に、tate+1 と、n-tate の"*" の位置が、1 と、n-2*tate、と成るのでしょう。
例えほんの少しでも参考に成れば幸いです。

Name: かずま
[URL]
Date: 2017年11月11日(土) 17:20
No: 3
(OFFLINE)

 Re: 中空が存在する3角形について

ss.8109 さんが書きました:具体的に何がわからないかというと、空白部分の考え方が一番わかりません。
そのほかにも全体的にどのようなプロセスで解けばいいのかわからないのですが、少しでも協力していただけたら嬉しいです。

n = 9 のとき
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
    *
   * *
  *   *
 *     *
*********
 
空白 4、星の幅 1
空白 3、星の幅 3 (中の空白 1)
空白 2、星の幅 5 (中の空白 3)
空白 1、星の幅 7 (中の空白 5)
空白 0、星の幅 9

1行目の空白は、幅 9 の半分の 4 ですから、
空白の個数を tate とすると、tate = n / 2。
行を進めるにつれ 1ずつ減って、0 が最終行です。

星の幅は、全体の幅から左右の空白を引いて
求められるので、n - 2 * tate。

最終行(tate = 0 のとき)以外は中抜きしたいので、
1文字目または (n - 2 * tate)文字目だけを '*' にしています。


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[14人]