• 历届试题 打印十字图


    问题描述

    小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
    在这里插入图片描述
    对方同时也需要在电脑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;
    }
    
  • 相关阅读:
    条件判断
    字符串和编码
    排序算法 C++实现
    Ubuntu16.04下 pip的安装与使用
    剑指offer(19): 顺时针打印矩阵
    剑指offer(21):栈的压入、弹出序列
    派生类对象地址赋给基类指针后, 指针对基类和派生类的函数调用
    synergy: error while loading shared libraries: libdns_sd.so.1: cannot open shared object file
    OpenCV Error: Assertion failed + error: (-215) 使用ros opencv中的DNN模块报错
    《 MySQL必知必会 》下载 以及 Ubuntu16.04 下配置其使用的软件环境
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338820.html
Copyright © 2020-2023  润新知