历届试题 打印十字图

问题描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
在这里插入图片描述
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

输入格式

一个正整数 n (n<30) 表示要求打印图形的层数。

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

在这里插入图片描述

样例输入2

3

样例输出2

在这里插入图片描述

提示

请仔细观察样例,尤其要注意句点的数量和输出位置。

代码

#include <iostream>
using namespace std;
char fan(char i)
{
	return i=='$'?'.':'$';
}
int main()
{
	int n;
	cin>>n;
	char ten[5+n*4+1][5+n*4+1];
	for(int i=1;i<=5+n*4;i++)
	{
		for(int j=1;j<=5+n*4;j++)
		{
			ten[i][j]=' ';
		}
	}
	for(int i=1;i<=(5+4*n);i++)
	{
		if(i>=3&&i<=5+4*n-2)
		{
			ten[1][i]='$';
			ten[i][1]='$';
		}
		else
		{
			ten[1][i]='.';
			ten[i][1]='.';
		}
	}
	for(int j=1;j<=(5+4*n);j++)
	{
		if(j>=3&&j<=5+4*n-2)
		{
			ten[5+4*n][j]='$';
			ten[j][5+4*n]='$';
		}
		else
		{
			ten[j][5+4*n]='.';
			ten[5+4*n][j]='.';
		}
	}
	ten[1][1]='$';
	ten[1][5+4*n]='$';
	ten[5+4*n][1]='$';
	ten[5+4*n][5+4*n]='$';
	for(int i=1;i<(5+4*n)/2;i++)
	{
		for(int j=1;j<(5+4*n)/2;j++)
		{
			ten[i+1][j+1]=fan(ten[i][j]);
		}
	}
	for(int i=1;i<(5+4*n)/2;i++)
	{
		for(int j=(5+4*n);j>(5+4*n)/2+2;j--)
		{
			ten[i+1][j-1]=fan(ten[i][j]);
		}
	}
	for(int i=(5+4*n);i>(5+4*n)/2+2;i--)
	{
		for(int j=1;j<(5+4*n)/2;j++)
		{
			ten[i-1][j+1]=fan(ten[i][j]);
		}
	}
	for(int i=(5+4*n);i>(5+4*n)/2+2;i--)
	{
		for(int j=(5+4*n);j>(5+4*n)/2+2;j--)
		{
			ten[i-1][j-1]=fan(ten[i][j]);
		}
	}
 	ten[1][1]='.';
 	ten[1][5+n*4]='.';
 	ten[5+n*4][1]='.';
 	ten[5+n*4][5+n*4]='.';
	int top=(5+n*4)/2-2,down=(5+n*4)/2+4,left=(5+n*4)/2-2,right=(5+n*4)/2+4;
	while(top>=1)
	{
		ten[top][(5+n*4)/2+1]='.';
		ten[top-1][(5+n*4)/2+1]='$';
		top-=2;
	}
	while(down<(5+4*n+1))
	{
		ten[down][(5+n*4)/2+1]='.';
		ten[down+1][(5+n*4)/2+1]='$';
		down+=2;
	}
	while(left>=1)
	{
		ten[(5+n*4)/2+1][left]='.';
		ten[(5+n*4)/2+1][left-1]='$';
		left-=2;
	}
	while(right<(5+4*n+1))
	{
		ten[(5+n*4)/2+1][right]='.';
		ten[(5+n*4)/2+1][right+1]='$';
		right+=2;
	}
	ten[(5+n*4)/2+1][(5+n*4)/2+1]='$';
	ten[(5+n*4)/2-1][(5+n*4)/2+1]='$';
	ten[(5+n*4)/2][(5+n*4)/2+1]='$';
	ten[(5+n*4)/2+2][(5+n*4)/2+1]='$';
	ten[(5+n*4)/2+3][(5+n*4)/2+1]='$';
	ten[(5+n*4)/2+1][(5+n*4)/2-1]='$';
	ten[(5+n*4)/2+1][(5+n*4)/2]='$';
	ten[(5+n*4)/2+1][(5+n*4)/2+2]='$';
 	ten[(5+n*4)/2+1][(5+n*4)/2+3]='$';
	for(int i=1;i<=5+n*4;i++)
	{
		for(int j=1;j<=5+n*4;j++)
		{
			printf("%c",ten[i][j]);
		}
		cout<<endl;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/AlexKing007/p/12338821.html