您的位置:首页 > 其它

蓝桥杯-历届试题-打印十字图

2018-03-10 15:34 337 查看
[align=center]历届试题 打印十字图[/align]问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$.. 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。输入格式一个正整数 n (n<30) 表示要求打印图形的层数。 输出格式对应包围层数的该标志。样例输入11样例输出1..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..样例输入23样例输出2..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..提示请仔细观察样例,尤其要注意句点的数量和输出位置。
#include<iostream>
using namespace std;

int fuck(int i, int j, int len)
{
//将图一分为四只看左上角部分
//上下对称过去  原图下半部分的横坐标对称到图的上半部分
if (i > len / 2 + 1)
{
i = len / 2 + 1 - (i - (len / 2 + 1));
}
//左右对称过去  原图右半部分的纵坐标对称到图的左半部分
if (j > len / 2 + 1)
{
j = len / 2 + 1 - (j - (len / 2 + 1));
}
//每个角上的四个点
if (i <= 2 && j <= 2)
return 0;
//上下左右每一层连续的部分  连续不拐弯的部分
if (i % 2 == 1 && j > i + 1 || j % 2 == 1 && i>j + 1)
return 1;
//其余部分  拐弯部分的三个'$'
if (i > 1 && i % 2 == 1 && j == i || i > 1 && i % 2 == 1 && j == i - 1 || j > 1 && j % 2 == 1 && i == j || j > 1 && j % 2 == 1 && i == j - 1)
return 1;
return 0;
}

int main()
{
int n;
cin >> n;
int  len = 4 * n + 5;   //边长
for (int i = 1; i <= 4 * n + 5; i++)
{
for (int j = 1; j <= 4 * n + 5; j++)
{
if (fuck(i, j, len))
{
cout << "$";
}
else
{
cout << ".";
}
}
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: