打印十字图
题目描述:
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
问题分析:
根据公式,划分部分进行打印,复印到另一部分去
代码展示(已验证):
//蓝桥杯-c语言 打印十字图
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int print(int n)
{
char a[130][130];
int i, j,x,y;
int row = 9 + (n - 1) * 4;
int col = 9 + (n - 1) * 4;
int cen = (row - 1) / 2;
// 对所有的数组中数据 赋给字符 "."
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
{
a[i][j]='.';
}
// 打印左上角的图形( 分成a,b,c 三部分)(然后利用对称赋值输出)
// 打印a 部分
for (i = cen; i > 0; i = i - 2) // 打印出 a[4][4] 34 43 22 12 21六个点的字符
{
a[i][i] = '$';
a[i-1][i] = '$';
a[i][i-1] = '$';
}
// 打印b部分 a[2][0] 30 40 42 四个点
x = 0;
for (y = 0; y <= (cen - 2); y = y + 2)
{
x = x + 2;
for (i = x; i <= cen; i++)
{
a[i][y] = '$';
}
}
// 打印c 部分 a[0][2] 03 04 24 四个点
y = 0;
for (x = 0; x <= (cen - 2); x = x + 2)
{
y = y + 2;
for (i = y; i <= cen; i++)
{
a[x][i] = '$';
}
}
// y轴对称 左上半部分对应左下半部分
for (y = 0; y <= cen;y++)
for (x = row - 1; x > cen; x--)
{
a[x][y] = a[row - 1 - x][y];
}
// x轴对称 左半部分 对应右半部分
for (x = 0; x < row;x++)
for (y = col - 1; y>cen; y--)
{
a[x][y] = a[x][col-1- y];
}
// 输出 图形
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%c", a[i][j]);
}
printf("\n");
}
return 0;
}
int main(int argc, char *argv[])
{
int n;
scanf("%d", &n);
print(n);
return 0;
}
泡泡:
主要还是找出公式进行打印,划分的时候要注意某一块和某一块的分割点。