题目链接:PAT1027 打印沙漏
程序思想:
- 计算出给定数字(n)能打印几行,会剩余几个(rest)符号;
- 通过打印函数单行打印, 上半部分与下半部分分开打印;
- 打印函数(print)思想:根据总行数(n)计算出列数(total),根据当前行(m)打印当前行。
#include <stdio.h>
//ch是要打印的字符,m是打印第几行, n是总行数
void print(char ch, int m, int n) {
int i, total = 1 + (n - 1) * 2;
for (i = 1; i <= total - (n - m) ;i++) {
if (i <= n - m) {
printf(" ");
} else {
printf("%c", ch);
}
}
printf("\n");
}
int main() {
int i, n;
char ch;
int k = 1, count = 0, rest;
scanf("%d %c", &n, &ch);
//计算剩余几个ch, 计算占几行
// rest是剩余个数,count是行数
n = n - k;
while (n >= 0) {
count++;
k = (1 + count * 2) * 2;
n = n - k;
}
rest = n + k;
//通过循环打印输出
for (i = count; i >=1; i-- ) {
print(ch, i, count);
}
for (i = 2; i <=count; i++) {
print(ch, i, count);
}
printf("%d\n", rest);
return 0;
}