字母沙漏

记录我做出的第一个这种类型的题目,虽然方法很笨:

 

 我的思路就是把这个沙漏分成上下两部分,分开打印,不过注意这里就直接打印就好了,不用特意拉一个数组来存,那样反倒做不出的。

下面直接上代码:

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 int main()
 4 {
 5     int n;
 6     while (scanf("%d", &n) > 0)
 7     {
 8         for (int i = 0; i < 2 * n + 1; i++) {
 9             if (i < n + 1) {   //沙漏的上半部分
10                 for (int j = 0; j < i; j++) {  //首先打印空格
11                     printf(" ");
12                 }
13                 for (int k = 0, t = i + 65; k < n - i + 1; t++, k++) {  //再打印前半部分的字母
14                     printf("%c", t);
15                 }
16                 for (int m = 0, ii = 64 + n; m < n - i; m++, ii--) {  //最后打印这一行的后半部分的字母
17                     printf("%c", ii);
18                 }
19             }
20             else if (i >= n + 1) {   //沙漏的下半部分,下面三个for循环的作用与上面是一样的
21                 for (int j = 0; j < n * 2 - i; j++) {
22                     printf(" ");
23                 }
24                 for (int k = 0, t = 65 + 2 * n - i; k < i - n + 1; k++, t++) {
25                     printf("%c", t);
26                 }
27                 for (int m = 0, jj = 64 + n; m < i - n; m++, jj--) {
28                     printf("%c", jj);
29                 }
30             }
31             printf("\n");
32         }
33         n = 0;
34     }
35     return 0;
36 }

题目中并未要求多组测试样例,但是我还是做成了多组测试样例的式样。(别问,问就是学校Oj上题目做习惯了QAQ)

来看看效果:

 

 

posted @ 2021-06-09 18:39  EvanTheBoy  阅读(73)  评论(0编辑  收藏  举报