3

C で 2 つの for ループと 1 つの if ステートメントを使用してこのような図を描くにはどうすればよいでしょうか?

AAAAA
AAAAB
AAABB
AAAAB
AAAAA

行と列を比較する必要があることはわかっていますが、正確な結果を得る方法がわかりません。

0 より大きく 24 より小さいすべての数値に対して機能する必要があります。

これまでに行ったことは次のとおりです。

for (row = 1; row <= n; row++)
{
    for (column = 1; column <= n; column++)
    {
        if ( row >= column )
        {
            printf("A");
        }
        else
        {
            printf("B");
        }
    }
    printf("\n");
}

n = 5の場合、これが得られます:

ABBBB
AABBB
AAABB
AAAAB
AAAAA
4

5 に答える 5

1

シングルループ:

for(i=0; i<30; ++i) putch(i%6==5?'\n':i%6-(i/6-2)*(i/6-2)<3?'a':'b');
于 2013-10-01T15:59:59.623 に答える
0

以下は他のものほど効率的ではないかもしれませんが、対称性を分析してパターンを生成するだけです

                        n=9
                n=7     0
        n=5     0       1
AAAAA   0       1       2
AAAAB   1       2       3
AAABB   2       3       4
AAAAB   1       2       3
AAAAA   0       1       2
                0       1
                        0

そう :

void generate_AB(int n, int i)
{
 int j;
   for(j=1;j<=n-i;j++) //n-i no. of As
      printf("A"); 
   for(j=1;j<=i;j++) // i no. of Bs
      printf("B");
      printf("\n");
}

int main()
{
  int i,j,n=5;

    for(i=0;i<=n/2;i++)  // Count 0 to INT(n/2)
        generate_AB(n,i);

    for(i=n/2-1;i>=0;i--) // Count  INT(n/2)-1 to 0
        generate_AB(n,i);

    return 0;
}
于 2013-10-01T15:43:48.030 に答える