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

5

干得好:

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

演示

解释 :

条件(row < column)“平局”:

ABBBB
AABBB
AAABB
AAAAB
AAAAA

条件(column > 5 - row + 1)“平局”:

AAAAA
AAAAB
AAABB
AABBB
ABBBB

这些条件的组合就是你的结果。

于 2013-10-01T15:33:00.883 回答
3

python代码(下面翻译成C):

for i in range(5):
    for j in range(5):
        if(i-j<0 and i+j>4):
            print("B",end="")
        else:
            print("A",end="")
    print()

C:

for(int i=0;i<5;i++)
{
   for(int j=0;j<5;j++)
   {
       if(i-j<0 && i+j>4) printf("B");
       else printf("A");
   }
   printf("\n");
}

你还记得几何中的 x=y 和 x=-y 线吗?解决方案是半平面的交点。

检查一下它背后的几何概念。

更新:您还表示它应该适用于一般情况,因此:

int n = SIZE;
for(int i=0;i<n;i++)
{
   for(int j=0;j<n;j++)
   {
       if(i-j<0 && i+j>(2*(n/2)) printf("B");
       else printf("A");
   }
   printf("\n");
}
于 2013-10-01T15:33:00.877 回答
1

这是一种方式;请注意我如何利用输出的对称性将行计数器从 -2 运行到 +2。我倒数计数col有点顽皮,虽然它使ifabs更清晰。

#include "stdio.h"

int main()
{
    for (int row = -2; row <= +2; ++row){
        for (int col = 5; col >= 1; --col){
            if (col > 2 - abs(row)){
                printf("A");
            } else {
                printf("B");
            }
        }
        printf("\n");
    }
}

int请注意,由于我放置在for循环内,您至少需要 C99 来编译它。

于 2013-10-01T15:31:21.590 回答
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 回答