星形模式逻辑

时间:2015-09-21 06:44:02

标签: objective-c arrays

我想要制作一个这样的星形图案。

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

我正在使用此代码。

for (int i=1; i<=3; i++) {
        for (int j=1; j<=3-i; j++) {
            printf(" ");
        }
        for (int k=1; k<=2*i-1; k++) {
            printf("x");
        }
        printf("\n");
    }

这将给出

     *
   * * *
 * * * * *

我将如何以递减顺序迭代。

 when I am using 
for (int i=3; i>=0; i--) {
        for (int j=1; j<=3-i; j++) {
            printf(" ");
        }
        for (int k=1; k<=2*i-1; k++) {
            printf("x");
        }
        printf("\n");
    }

xxxxx
 xxx
  x

我们如何合并?

3 个答案:

答案 0 :(得分:4)

这里的另一个逻辑

int x=11;
int y=x/2;
int z=1;

BOOL b1=true;
BOOL b2= true;
for(int i=0;i<x;i++)
{
    for(int j=0;j<y;j++)
    {
        printf(" ");
    }
    for(int k=0;k<z;k++)
    {
        printf("*");
    }
    if(y==0) b1=false;
    if(z==x) b2=false;

    y=b1?y-1:y+1;
    z=b2?z+2:z-2;
    printf("\n");
}

答案 1 :(得分:3)

尝试以下逻辑,

        for (int i=1; i<=3; i++) {
        for (int j=1; j<=3-i; j++) {
            printf(" ");
        }
        for (int k=1; k<=2*i-1; k++) {
            printf("*");
        }
        printf("\n");
    }

    for (int i =2; i>=0; i--) {
        for (int j=1; j<=3-i; j++) {
            printf(" ");
        }
        for (int k=1; k<=2*i-1; k++) {
            printf("*");
        }
        printf("\n");
    }

输出看起来像:

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

答案 2 :(得分:0)

给定的模式是简单的金字塔星型和倒金字塔星型的组合。它由 N * 2-1 行组成(在这种情况下,N = 3)。每行包含按升序和降序打印的空格和星星。

星星按升序打印,直到第N行。在第N行之后,星星按降序打印。

以降序打印空格,直到第N行。在第N行之后,以递增的顺序打印行距。将鼠标指针悬停在图案上以计算总空间。

逐步进行描述性逻辑印刷菱形星形图案。

  1. 输入要从用户打印的行数(实际行数/ 2)。将其存储在变量rows中。
  2. 声明两个变量以跟踪要打印每一行的总列数,例如stars=1spaces=N-1
  3. 要遍历行,请运行从1到rows*2-1的外部循环。循环结构应类似于for(i=1; i<rows*2; i++)
  4. 要打印空格,请运行从1到空格的内部循环。循环结构应类似于for(j=1; j<=spaces; j++)。在此循环内打印单个空格。
  5. 要打印星星,请从1 to stars*2-1运行另一个内循环。循环结构应类似于for(j=1; j<=stars; j++)。在此循环中打印星星。
  6. 打印一行的所有列后,移至下一行,即打印新行。
  7. 选中if(i < rows),然后增加星号并减少空格。否则增加空间并减少星星。

尝试以下代码:-

    int i, j, rows;
    int stars, spaces;

    printf("Enter rows to print : ");
    scanf("%d", &rows);

    stars = 1;
    spaces = rows - 1;

     /* Iterate through rows */
    for(i=1; i<rows*2; i++)
    {
    /* Print spaces */
    for(j=1; j<=spaces; j++)
        printf(" ");

    /* Print stars */
    for(j=1; j<stars*2; j++)
        printf("*");

    /* Move to next line */
    printf("\n");

    if(i<rows)
    {
        spaces--;
        stars++;
    }
    else
    {
        spaces++;
        stars--;
    }
    }