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

在这里插入图片描述

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值