Sandglass
题目描述
用字符输出一个如同样例格式的沙漏的图形。要求如下:
- 用
-
做上下底 - 用
\
和/
做斜边 - 用
*
表示沙子 - 上层沙子空一行,其他行填满;下层沙子只有中间一列。
- 上下底的行首无空格,所有行的行末无空格。
输入
第一行是样例数T(1≤T≤40)。 以后的每行一个样例,是一个整数n(6≤n≤80),n是偶数,表示沙漏的行数。
输出
每行输出一个对应的图形,每个样例之后输出一个空行。
样例输入
2 6 8
样例输出
----- \ / \*/ /*\ / * \ ----- ------- \ / \***/ \*/ /*\ / * \ / * \ -------
思路分析:打印题最好分成几部分进行打印,不要老想着用一个大循环,注意每个样例后要打印一个空行
#include <stdio.h>
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
for (int i = 0; i < n/2; i++) {
if (i == 0 ) {
for (int j = 0; j < n - 1; j++) {
printf("-");
}
printf("\n");
}
else {//打印前面一半
if (i == 1) {//控制第一行的情况
//控制\前面的空格
//控制左边
printf("\\");
for (int j = 0; j < n - 3; j++) {
printf(" ");
}
printf("/");
printf("\n");
}
else {//其它行数
for (int j = 0; j < i - 1; j++) {
printf(" ");
}
printf("\\");
for (int j = 0; j < n - 1 - i * 2; j++) {
printf("*");//控制*的打印
}
printf("/");
printf("\n");
}
}
}
//打印下半段
for (int i = 0; i < n / 2; i++) {
if (i == n / 2 - 1) {
for (int j = 0; j < n - 1; j++) {
printf("-");
}
printf("\n");
}
else {
for (int j = 0; j < n / 2 - i - 2; j++) {
printf(" ");
}
printf("/");
for (int j = 0; j < i; j++) {
printf(" ");
}
printf("*");
for (int j = 0; j < i; j++) {
printf(" ");
}
printf("\\");
printf("\n");
}
}
printf("\n");
}
}