打印沙漏图形中的数学方法
如何打印 n 行沙漏图形?
考虑到 双重循环自变量(i,j) 与 平面直角坐标系坐标(x,y) 的对应性,
可以运用数学中 线性规划
的知识求得沙漏图形的可行域,
运用双重循环,判断符号坐标所对应的位置是否位于图形可行域内。
即:(j+i<=n+1&&i<=j) || (j+i>=n+1&&i>=j)
考虑到行末没有空格,因此需要对空格的打印进行控制。
即:(i>j&&i+j<n+1)
我的代码如下:
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if( (j+i<=n+1&&i<=j) || (j+i>=n+1&&i>=j) ) //线性方程组确定当前位置是否满足打印条件。
{
printf("*");
}
else if(i>j&&i+j<n+1) //行末没有空格。
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
代码执行效果如下图所示: