C 1027 打印沙漏 (20 分)


原题

https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328

代码

#include 
#include 
using namespace std;

vector vec;
int main()
{
    int total, i=1, sum = 0;
    char c;
    cin >> total >> c;
    //获得实际打印的个数
    if (total > 0)
    {   vec.push_back(i); //中间的字符数
        i = 3, sum = 1;     
        while ((sum + i * 2) <= total)
        {
            sum += i * 2;
            vec.push_back(i);
            i += 2;
        }
    }
    //按vec数组里的个数打印
    for (int j = vec.size()-1; j >= 0; j--)
    {   
        for(int i = 0; i < (vec[vec.size()-1]-vec[j])/2; i++)printf(" ");
        for (int i = 0; i < vec[j]; i++) printf("%c",c);
        printf("\n");
    }
    for (int j = 1; j < vec.size(); j++)
    {
        for(int i = 0; i < (vec[vec.size()-1]-vec[j])/2; i++)printf(" ");
        for (int i = 0; i < vec[j]; i++) printf("%c",c);
        printf("\n");
    }
    cout << total - sum;
    return 0;
}