#include #include #include #include using namespace std;

int main() { int n; char c; cin >> n >> c; vector v; int i = 0; while (true) //计算能够形成的沙漏的最大行数 { int sum = 2 * pow(i, 2) - 1; if (sum <= n) v.push_back(sum); else break; i++; } i--; int sum = 2 * pow(i, 2) - 1; int last = n - sum; //剩余的符号数 for (int j = v.size() - 1; j >= 0; j--) //倒序输出 { int k = (v[j] - 1) / 2; //计算每行空格数 for (int l = 0; l < k; l++) cout << ' '; for (int l = 0; l < v[j]; l++) cout << c; cout << endl; } for (int j = 1; j < v.size(); j++) //正序输出 { int k = (v[j] - 1) / 2; //计算每行空格数 for (int l = 0; l < k; l++) cout << ' '; for (int l = 0; l < v[j]; l++) cout << c; cout << endl; } cout << last << endl; return 0; }

C++ 打印沙漏形状 - 算法详解及代码实现

原文地址: https://www.cveoy.top/t/topic/ol70 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录