Sandglass |
Description |
Sandglass 题目描述 用字符输出一个如同样例格式的沙漏的图形。要求如下:
输入 第一行是样例数T(1≤T≤40)。 以后的每行一个样例,是一个整数n(6≤n≤80),n是偶数,表示沙漏的行数。 输出 每行输出一个对应的图形,每个样例之后输出一个空行。 样例输入 2 6 8 样例输出 ----- \ / \*/ /*\ / * \ ----- ------- \ / \***/ \*/ /*\ / * \ / * \ ------- |
我把这个图分为了三个部分 用二维数组先把他们存起来 再进行输出
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
int i,j,h;
char a[100][100]={};
scanf("%d",&h);
//框框部分
for(i=1;i<h-1;i++)
{
if(i<h/2)
{
for(j=0;j<h-i;j++)
{
if(j==i-1)
{
a[i][j]='\\';
}
else if(j==h-i-1)
{
a[i][j]='/';
}
else
{
a[i][j]=' ';
}
}
}
else
{
for(j=0;j<=i;j++)
{
if(j==h-i-2)
{
a[i][j]='/';
}
else if(j==i)
{
a[i][j]='\\';
}
else
{
a[i][j]=' ';
}
}
}
}
//上下底边
i=0;
for(j=0;j<h-1;j++)
{
a[i][j]='-';
}
i=h-1;
for(j=0;j<h-1;j++)
{
a[i][j]='-';
}
//星星部分 因为上下是不一样的 所以分两种情况
for(i=2;i<h-1;i++)
{
if(i<h/2)
{
for(j=i;j<h-1-i;j++)
{
a[i][j]='*';
}
}
else
{
j=(h-2)/2;
a[i][j]='*';
}
}
i=0;
for(j=0;j<h-1;j++)
{
printf("%c",a[i][j]);
}
printf("\n");
for(i=1;i<h-1;i++)
{
if(i<h/2)
{
for(j=0;j<h-i;j++)
{
printf("%c",a[i][j]);
}
}
else
{
for(j=0;j<=i;j++)
{
printf("%c",a[i][j]);
}
}
printf("\n");
}
i=h-1;
for(j=0;j<h-1;j++)
{
printf("%c",a[i][j]);
}
printf("\n");
printf("\n");
}
return 0;
}