字母沙漏
记录我做出的第一个这种类型的题目,虽然方法很笨:
我的思路就是把这个沙漏分成上下两部分,分开打印,不过注意这里就直接打印就好了,不用特意拉一个数组来存,那样反倒做不出的。
下面直接上代码:
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)
来看看效果: