PTA 打印沙漏
程序员文章站
2022-06-08 08:22:16
...
https://pintia.cn/problem-sets/17/problems/260
题解
关键词:等差数列,循环
思路:打印三个部分:每行左侧的空格,每行的符号,以及最后的剩余数字。
坑点:沙漏右侧不能输出空格,否则会有格式错误。最后一行输出数字后换行。
参考代码:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <stack>
#include<stdio.h>
using namespace std;
void printStar(char c);
void printSpace();
void pringLine(int leftSpace, int width, char c);
bool judgeDeepth(int n, int x);
int main() {
int x;
char c;
scanf("%d %c", &x, &c);
// 1 3 5 奇数 2n-1 半边星星总数n^2
//n 层
//总星星数目 2*n^2 -1
int n = 1;//半边三角的高度
while (!judgeDeepth(n,x)) {
n++;
}
int rest = x - (2 * n * n - 1);
//display
int width = 2 * n - 1;
for (int i = 0; i < n; i++)
{
pringLine(i, width, c);
}
for (int i = n - 2; i >= 0; i--)
{
pringLine(i, width, c);
}
printf("%d\n", rest);
return 0;
}
bool judgeDeepth(int n, int x) {
int currentNum = 2 * n * n - 1;
int nextNum = 2 * (n + 1) * (n + 1) - 1;
return (currentNum <= x) && (nextNum > x);
}
void pringLine(int leftSpace, int width, char c) {
//int leftSpace = i;
int righSpace = leftSpace;
for (int j = 0; j < leftSpace; j++)
{
printSpace();
}
for (int j = 0; j < width - leftSpace - righSpace; j++)
{
printStar(c);
}
//注意:右侧不要打印符号!否则会“格式错误”
//for (int j = 0; j < righSpace; j++)
//{
// printSpace();
//}
printf("\n");
}
void printStar(char c) {
printf("%c", c);
}
void printSpace() {
printf(" ");
}
上一篇: 这个每次刷新都要去数据库里面查询一遍吗?
下一篇: Python实现模拟时钟代码推荐