#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
char ch;
scanf("%d %c",&n,&ch);
//特判:n==0,n==1此时line_up=0,没法打印和计算
if(n==0){
cout<<0;
return 0;
}else if(n==1){
cout<<ch<<endl;
cout<<0;
return 0;
}
//ak=a1+(k-1)*d=2*k-1,Sk=k*k
//n+1=2*Sk
int line_up=0;
for(int i=0;i<n;i++){//求行数
if((2*i*i)<=(n+1) && 2*(i+1)*(i+1)>(n+1)){
line_up=i;
break;
}
}
for(int i=0;i<line_up-1;i++){
for(int j=0;j<i;j++) cout<<" ";
for(int j=2*(line_up-i)-1;j>0;j--) cout<<ch;
cout<<endl;
}
for(int i=1;i<=line_up;i++){
for(int j=(line_up-i);j>0;j--) cout<<" ";
for(int j=0;j<2*i-1;j++) cout<<ch;
cout<<endl;
}
cout<<n-(2*line_up*line_up-1);
return 0;
}
【天梯赛】L1-002 打印沙漏 (20 分)
最新推荐文章于 2023-12-23 10:49:48 发布
该博客主要介绍了一个C++程序,用于根据输入的整数n和字符ch,计算并打印一个由ch组成的正方形图案。程序首先处理特殊情况n=0和n=1,然后通过数学计算确定行数line_up,最后分别输出上半部分和下半部分的字符图案。程序涉及到二分查找的思想和二维数组的概念。
1028

被折叠的 条评论
为什么被折叠?



