*で2等辺三角形を作る

投稿者: Anonymous

実行例を次のようにするにはどうすればいいでしょうか?
実行例:

./a.out
1辺:2
**
*

ちなみに、自分は以下のようにプログラムしました。

int main(void)
{
    int i,j,n;
    printf("一辺: ");
    scanf("%d",&n);
    for(i=n;i>0;i=i-1){
       for(j=n;i<=j;j=j-1) {
        printf("*");
    }
    printf("n");
    }
    return 0;
}

解決

質問者の 2等辺三角形 (n=5)

*
**
***
****
*****

回答者 774RR さんの 2等辺三角形 (n=5)

*****
****
***
**
*

今回の案の 2等辺三角形 (n=5)

    *
   ***
  *****
 *******
*********

n = 5 の場合
* の数は上から順番に
1 , 3 , 5 , 7 , 9 個なので 式 2 * i – 1 ( i は 1 から n まで )
* の前のスペースの数は
4 , 3 , 2 , 1 , 0 個なので 式 n – i ( i は 1 から n まで )

と まず大まかな、計画を立てて、それから ループを使ってプログラムを書きます。

// 2等辺三角形を描画する
void printTriangle(int n)
{
    for(int i = 1; i <= n; i++) {
        int width = i * 2 - 1;
        int prev_space_n = n - i;
        for(int j = 0; j < prev_space_n ; j++) {
            printf(" ");
        }
        for(int j = 0; j < width ; j++) {
            printf("*");
        }
        printf("n");
    }
}

参考までに、円もかけます。

void printCircle(int r)
{
    // x^2 + y^2 <= r^2 : 半径 r の 円を描画する
    int r2 = r * r;
    for(int x = -r ; x <= r ; x++) {
        for(int y = -r; y <= r; y++) {
            int d = x * x + y * y;
            if (d <= r2) {
                printf("*");
            } else {
                printf(" ");
            }
        }
        printf("n");
    }
}

r=15 の 円

               *
          ***********
        ***************
      *******************
     *********************
    ***********************
   *************************
   *************************
  ***************************
  ***************************
 *****************************
 *****************************
 *****************************
 *****************************
 *****************************
*******************************
 *****************************
 *****************************
 *****************************
 *****************************
 *****************************
  ***************************
  ***************************
   *************************
   *************************
    ***********************
     *********************
      *******************
        ***************
          ***********
               *
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *