关键是要把各层的数目以及关系计算出来:
n为半边沙漏的层数,总数为N;
因此,总层数为2n-1,总数为 N = 2nn - 1, 最上层个数2n-1。根据N求出n,以及可以剩余的个数。
再然后,计算每一层层号和空格与字符之间的关系。设最上层为第n层,则各层中间符号数为center = 2i -1,左边空格数为 left = ((2n-1) - center) / 2, 使用一个while循环就可以简单的打印出来。
打印下层沙漏时,只需把初始层数 i 设为 2 即可。
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int N, n, chengyu, left, center, right, i; //总层数为n*2-1,总数为N;N = 2*n*n - 1, 最上层个数2n-1
char ch;
cin >> N >> ch;
n <