PREV-2_蓝桥杯_打印十字图

时间:2023-12-15 10:09:56
问题描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:

..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
示例代码:
 #include <stdio.h>
#include <string.h> int n = , len = ;
char arr[+][+] ; void dp(int x)
{
int i,j,k;
if (x <= *n)
{
if (x% == )
{
i = x+ , j = len-x;
arr[i][i] = arr[x][i] = arr[i][x] = '$'; /*左上*/
arr[i][j] = arr[x][j] = arr[i][j+] = '$'; /*右上*/
arr[j][i] = arr[j+][i] = arr[j][x] = '$'; /*左下*/
arr[j][j] = arr[j+][j] = arr[j][j+] = '$';/*右下*/
}
else
{
for (i = x+ ; i <= len-x- ; i ++)
{
arr[x][i] = arr[len+-x][i] = '$';/*上下边*/
arr[i][x] = arr[i][len+-x] = '$';/*左右边*/
}
}
dp(x+);
}
return ;
} int main(void)
{ int i,j;
memset(arr,'.',sizeof(arr));
scanf("%d",&n);
len += *n; /*内部的十字*/
for (i = len/+ , j = *n+ ; j <= len-*n ; j ++)
arr[i][j] = '$';
for (j = len/+ , i = *n+ ; i <= len-*n ; i ++)
arr[i][j] = '$'; dp();/*外圈*/ for (i = ; i <= len ; i ++)
{
for (j = ; j <= len ; j ++)
{
printf("%c",arr[i][j]);
}
printf("\n");
}
return ;
}