#include<bits/stdc++.h>
using namespace std;
const int N =305 ;
char a[N][N],c[N];
string s;
int main()
{
s="";
for(int i=1;i<=200;i++){
s+=to_string(i);
}
int index=0;
int n;
cin>>n;
int y=n;
for(int i=0;i<n;i++)
{
for(int j=0;j<y;j++)
{
a[i][j]='.';
}
y+=1; //这么写会导致输出不可见字符(应该是这么说的)
}
int x=n,m;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(j==x-1)
{
a[i][x-1]=s[index++];
x--;
}
}
}
for(int i=n-1,j=1;j<2*n-1;j++)
{
a[i][j]=s[index++];
}
m=2*n-3;
for(int i=n-2;i>0;i--)
{
a[i][m]=s[index++];
m--;
}
for(int i=0;i<n;i++)
{
y+=i;
for(int j=0;j<y;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
}
如果你再试了之后发现这段代码有错误,100%正确答案就在下面。
上面这段代码是我没有优化时写的垃圾,如果这段垃圾在dev和cb里面输出的答案看上去正确的,在请教了大佬之后,进行了代码的优化
#include<bits/stdc++.h>
using namespace std;
const int N =305 ;
char a[N][N];
string s;
int main()
{
for(int i=1;i<=200;i++){
s+=to_string(i);//这个是string最奇妙的地方了
}
int index=0;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+i;j++)
{
a[i][j]='.';
}
}
int x=n,m;
for(int i=0;i<n;i++)
{
a[i][x-1]=s[index++];//left
x--;
}
for(int i=n-1,j=1;j<2*n-1;j++)
{
a[i][j]=s[index++];//bottom
}
m=2*n-3;
for(int i=n-2;i>0;i--)
{
a[i][m]=s[index++];//right
m--;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n+i;j++)//好久没写三角类的代码了,导致这个地方没想起来
{
cout<<a[i][j];
}
cout<<endl;
}
}
上面两行的string转化代码参考了如下博客
https://blog.youkuaiyun.com/hzf0701/article/details/115598249