PAT B1027 打印沙漏(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1027 打印沙漏

解题思路

先找到第一行需要打印的字符数,再通过循环控制字符数目打印

易错点

  • 沙漏右侧没有空格

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
void print(int cnt, int i, char c){
for(int j = 0; j < cnt; j++) printf(" ");
for(int j = 0; j < i; j++) printf("%c", c);
printf("\n");
}
int main(){
int N, k = 1, r = 1;
char c;
scanf("%d %c", &N, &c);
for(int i = 3; r + 2 * i <= N; i+=2){
r = r + 2 * i;
k = i;
}
for(int i = k, cnt = 0; i >= 1; i-=2, cnt++) print(cnt, i, c);
for(int i = 3, cnt = (k - 1) / 2 - 1; i <= k; i+=2, cnt--) print(cnt, i, c);
printf("%d", N - r);
return 0;
}