在C中创建一个空心菱形

时间:2014-10-09 14:11:27

标签: c

我试图在C中创建一个空心钻石,这就是我现在所拥有的:

#include <stdio.h>

main() {
       int n, a = 1, x, y;

       printf("Enter size: ");
       scanf("%d", &n);

       a = n - 1;

       for(x = 1; x <= n; x++) {
              for(y = 1; y <= a; y++) printf(" ");

              a--;

              for(y = 1; y <= 2*x-1; y++) printf("*");

              printf("\n");
       }

       a = 1;

       for(x = 1; x <= n-1; x++) {
              for (y = 1; y <= a; y++) printf(" ");

              a++;

              for (y = 1; y <= 2*(n-x)-1; y++) printf("*");

              printf("\n");
       }
}

如你所见,它打印出一颗钻石,但不是空心钻石。有帮助吗?

2 个答案:

答案 0 :(得分:1)

四个小改动,

for(y = 1; y <= 2*x-1; y++) printf("*");
printf("\n");

应该是这样的,

for(y = 1; y < 2*x-1; y++) printf((y == 1) ? "*" : " ");
printf("*\n");

for (y = 1; y <= 2*(n-x)-1; y++) printf("*");
printf("\n");

也应该像,

for (y = 1; y < 2*(n-x)-1; y++) printf((y == 1) ? "*" : " ");
printf("*\n");

当我进行这些更改时,程序会打印空心菱形。

答案 1 :(得分:1)

假设您正在尝试输出类似的内容,

....#....
...###...
..#####..
.###x###.
###x x###
.###x###.
..#####..
...###...
....#....

到目前为止,最简单的方法是迭代超过0&lt; = x&lt; = size,0&lt; = y&lt; = size, 并通过曼哈顿距离确定坐标(x,y) - (size / 2,size / 2), 如果该点位于周边。制作方程 MIN &lt; = 距离&lt; = MAX ,可以控制钻石的厚度。

void diamond(int size)
{
  int i, j;
  for (i = 0; i < size; i++)
  {
    for (j = 0; j < size; j++)
      printf("%c", (abs(i - size/2) + abs(j - size/2)) == (size / 2) ? '#' : ' ');
    printf("\n");
  }
}