L1-002 打印沙漏 分数 20

重点找递推公式,推导层数

// 8'39"
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n;
    cin >> n;
    char c;
    cin >> c;
    int cur = 1;
    for(int i = 0; i <= n; ++ i)
        if(2 * (i * i) - 1 > n)
        {
            cur = i - 1;
            break;
        }

    for(int i = cur; i >= 1; -- i)
    {
        for(int j = 1; j <= cur - i; ++ j)
            cout << " ";
        for(int j = 1; j <= 2 * i - 1; ++ j)
            cout << c;
        cout << endl;
    }
    
    for(int i = 2; i <= cur; ++ i)
    {
        for(int j = 1; j <= cur - i; ++ j)
            cout << " ";
        for(int j = 1; j <= 2 * i - 1; ++ j)
            cout << c;
        cout << endl;
    }
    cout << n - 2 * cur * cur + 1;
    return 0;
}
posted @ 2024-07-31 14:13  Frodnx  阅读(14)  评论(0)    收藏  举报