#include #include #include using namespace std; int main(){ int n,k=1,sum=0; char c; cin>>n>>c; vector v;//存放每一行字符数的数组 while(sum<=n){ sum+=2kk-1;//计算总字符数 k++; } k--;//此时k为沙漏的半径 sum-=2kk-1;//减去最后一行的字符数,因为已经大于n k--;//此时k为沙漏的半径 for(int i=k;i>0;i--){//遍历每一行 int n_space=k-i;//计算空格数 int n_c=2*i-1;//计算字符数 for(int j=0;j<n_space;j++) cout<<' ';//输出空格 for(int j=0;j<n_c;j++) cout<<c;//输出字符 cout<<endl;//换行 v.push_back(n_c);//存放字符数 } for(int i=1;i<v.size();i++){//遍历下半部分每一行 int n_space=i;//计算空格数 int n_c=v[v.size()-i-1];//读取字符数 for(int j=0;j<n_space;j++) cout<<' ';//输出空格 for(int j=0;j<n_c;j++) cout<<c;//输出字符 cout<<endl;//换行 } cout<<n-sum-1<<endl;//输出剩余字符数 return 0; }

C++ 打印沙漏图案:算法实现与优化

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

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