ABA
@ABA (A)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

条件を変更したい

Q&A

Closed

解決したいこと

下記のプログラミングを作成しました。この内容の条件を一部変更したいと考えています。
解決方法を教えてください。
入力を 4 とした場合

現状の出力は 左右対称のひし形で
1↵
222↵
33333↵
4444444↵
33333↵
222↵
1↵
となっています。

こちらを左右対称のひし形で
1↵
222↵
33333↵
4444444↵
55555↵
666↵
7↵
としたいと考えています。

#include <stdio.h>

int main(void)
{
  int i, j, n;


  scanf("%d", &n);

  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n - i; j++) {
      printf(" ");
    }

    for (j = 1; j < 2 * i; j++) {
      printf("%d", i);
    }

    printf("\n");
  }

  for (i = n - 1; i >= 1; i--) {
    for (j = 1; j <= n - i; j++) {
      printf(" ");
    }

    for (j = 1; j < 2 * i; j++) {
      printf("%d", i);
    }

    printf("\n");
  }

  return 0;
}

自分で試したこと

入力の正の整数をnとすると、2n-1段のひし形を出力するため、2n-1を使ってプログラミングを行おうと考えましたが、うまくできない状態です。

0

3Answer

考え方はいろいろあると思いますが、とりあえず次の形から初めてはいかがでしょうか?

int main(void){
    int num = 4; // 入力値
    int max = num * 2 - 1;
    int i, j;
    
    for (i = 1; i <= max; i++) {
        for (j = 1; j <= max; j++) {
            printf("%d", i);
        }
        printf("\n");
    }
    return 0;
}

iを縦軸、jを横軸としています。
これを実行すると次のような結果が得られます。

1111111
2222222
3333333
4444444
5555555
6666666
7777777

ここから空白と数字を出し分けて菱形にするのですが、次の2つの考え方になると思います。

  1. 特定の条件の時に数字を出力し、それ以外は空白を出力する
  2. 特定の条件の時に空白を出力し、それ以外は数字を出力する

ここでは2の方法で考えるとしましょう。
まずは、菱形の左上の部分を空白にしてみます。

int main(void){
    int num = 4; // 入力値
    int max = num * 2 - 1;
    int i, j;
    
    for (i = 1; i <= max; i++) {
        for (j = 1; j <= max; j++) {
            if (j <= num - i) { // 左上の空白の条件
                printf(" ");
            } else {
                printf("%d", i);
            }
            
        }
        printf("\n");
    }
    return 0;
}

これの結果は次の通りです。(_は空白を表します)

___1111
__22222
_333333
4444444
5555555
6666666
7777777

あとは残りの3箇所の条件を追加していく流れになります。

1Like

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌