一个贼有趣的图形题!!!
题目描述
用字符输出一个如同样例格式的沙漏的图形。要求如下:
- 用
-
做上下底 - 用
\
和/
做斜边 - 用
*
表示沙子 - 上层沙子空一行,其他行填满;下层沙子只有中间一列。
- 上下底的行首无空格,所有行的行末无空格。
输入
第一行是样例数T(1≤T≤40)。 以后的每行一个样例,是一个整数n(6≤n≤80),n是偶数,表示沙漏的行数。
输出
每行输出一个对应的图形,每个样例之后输出一个空行。
样例输入
2 6 8
样例输出
----- \ / \*/ /*\ / * \ ----- ------- \ / \***/ \*/ /*\ / * \ / * \ -------
思路:还是老样子,分部分去打。
#include<stdio.h>
int main()
{
int n,i,j,k,m,m1,T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
m=n/2;
m1=n/2;
for(i=1;i<=n-1;i++)
{
printf("-");
}
puts("");
for(i=1;i<=m-1;i++)//上部分行数
{
for(j=1;j<=i-1;j++)
{
printf(" ");//右斜杠前面空格
}
if(i==1)//没有沙子的一行
{
for(j=1;j<=2*m1-1;j++)// 3
{
if(j==1)
{
printf("\\");// 注意反斜线的格式输出!!!
}
if(j>1&&j<2*m1-1)
{
printf(" ");
}
if(j==2*m1-1)
{
printf("/");
}
}
puts("");
}
//puts("");
// m1=m1-1;
if(i>1)
{
m1=m1-1;
for(j=1;j<=2*m1-1;j++)
{
if(j==1)
{
printf("\\");// 注意反斜线的格式输出!!!
}
if(j>1&&j<2*m1-1)
{
printf("*");
}
if(j==2*m1-1)
{
printf("/");
}
// m--;
}
puts("");
}
}
for(i=1;i<=m-1;i++)//下部分行数
{
for(j=1;j<=m-1-i;j++)
{
printf(" ");//左斜杠前面空格
}
for(j=1;j<=2*i+1;j++)
{
if(j==1)
{
printf("/");
}
else if(j==i+1)
{
printf("*");
}
else if(j==2*i+1)
{
printf("\\");
}
else
{
printf(" ");
}
}
puts("");
}
for(j=1;j<=n-1;j++)
{
printf("-");
}
puts("\n");
}
return 0;
}