我试图在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");
}
}
如你所见,它打印出一颗钻石,但不是空心钻石。有帮助吗?
答案 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");
}
}