#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 发布