图形排版--叠筐问题

题目描述:把一个个大小差一圈的筐叠上去,使得从上往下看时,边框花色交错。

输入:是一个三元组,(外框尺寸n,中心花色字符,外框花色字符),n是>0且<80的奇整数,后二者都是ASCII可见字符。

输出:图案中心花色和外框花色字符从内层起交错相叠,多筐相叠时,最外框的角总是被打磨掉。叠框与叠框之间应有一层间隔。

输入样例1:11 B A

输出样例1:

输入样例2:5 # w

输出样例2:

#include<iostream>
using namespace std;
char arr[80][80];
int main()
{
	int n;   //筐的尺寸
	char a, b;    //a是中心花色字符,b是外框花色字符
	cin >> n >> a >> b;

//先填充成一个正方形图案,从内圈往外圈填充
for (int k = 0; k <= n / 2; k++)
{//记录当前是第几层,最内层为第0层,依次往外递增
	char c;    //第k层填充的字符
	if (k % 2 == 1)
	{
		c = b;    //k是奇数,填外筐花色字符
	}
	else
	{
		c = a;    //k是偶数,填中心花色字符
	}
	//填充每一层的左筐和右筐
	for (int i = n / 2 - k; i <= n / 2 + k; i++)
	{
		arr[i][n / 2 - k] = c;    //左筐
		arr[i][n / 2 + k] = c;    //右筐
	}
	//填充每一层的上筐和下筐
	for (int j = n / 2 - k + 1; j <= n / 2 + k - 1; j++)
	{
		arr[n / 2 - k][j] = c;    //上筐
		arr[n / 2 + k][j] = c;    //下筐
	}
}

//删除整个图案四个角上的字符,置为空格
arr[0][0] = ' ';
arr[0][n-1] = ' ';
arr[n-1][0] = ' ';
arr[n-1][n-1] = ' ';

//打印输出,间隔一行
for (int i = 0; i < n; i++)
{
	for (int j = 0; j < n; j++)
	{
		cout << arr[i][j];
	}
	cout << endl<<endl;
}
return 0;
}
全部评论

相关推荐

昨天 13:43
门头沟学院 Java
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务