0
点赞
收藏
分享

微信扫一扫

7-2 等腰三角形-第九届蓝桥省赛-C组 (100 分)

color_小浣熊 2022-01-24 阅读 66

在这里插入图片描述

#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.csdn.net/hzf0701/article/details/115598249

举报

相关推荐

0 条评论