1. 程式人生 > 其它 >C 1027 列印沙漏 (20 分)

C 1027 列印沙漏 (20 分)

原題

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

程式碼

#include <iostream>
#include <vector>
using namespace std;

vector<int> 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;
}