测试点一错误原因
目前本人经过测试发现测试点一的测试样例应该是以下这个:
1 *
代码错误原因
错误部分
cin>>n>>ch;
int temp=1,last=0;
int cur=1;
while(temp<n)
{
last=temp;
cur+=2;
temp+=cur*2;
}
cur-=2;
int cha=n-last;
temp=cur;
int len=cur;
while(temp>0)
{
for(int i=1;i<=(len-temp)/2;++i)cout<<" ";
for(int i=1;i<=temp;++i)cout<<ch;
// for(int i=1;i<=(len-temp)/2;++i)cout<<" ";
cout<<"\n";
temp-=2;
}
这种时候当输入1的时候,cur==-1,最开始打印的一层temp=cur 为-1,所以这里-1<0不会进入while(temp>0)循环,也就不会打印一个*号
于是测试点1错误
AC代码
#include <bits/stdc++.h>
using namespace std;
#define eb emplace_back
//#define int long long
const int N=3e5+100;
const int M=5e3+10;
const int inf=0x3f3f3f3f;
int n;
char ch;
int main()
{
cin>>n>>ch;
int temp=1; //使用的总的节点数
int cur=1;//为1,为开始的一层结点数量
while(temp<n)
{
if(temp+(cur+2)*2>n)break; //最开始打印层变化之前判断是否满足条件
cur+=2;
temp+=cur*2;
}
int cha=n-temp;
temp=cur;
int len=cur;
while(temp>0)
{
for(int i=1;i<=(len-temp)/2;++i)cout<<" ";
for(int i=1;i<=temp;++i)cout<<ch;
cout<<"\n";
temp-=2;
}
temp=3;
while(temp<=cur)
{
for(int i=1;i<=(len-temp)/2;++i)cout<<" ";
for(int i=1;i<=temp;++i)cout<<ch;
cout<<"\n";
temp+=2;
}
cout<<cha;
return 0;
}