小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$………..$..
$$$.$$$$$$$$$.$$$
$…$…….$…$
$.$$$.$$$$$.$$$.$
$.$…$…$…$.$
$.$.$$$.$.$$$.$.$
$.$.$…$…$.$.$
$.$.$.$$$$$.$.$.$
$.$.$…$…$.$.$
$.$.$$$.$.$$$.$.$
$.$…$…$…$.$
$.$$$.$$$$$.$$$.$
$…$…….$…$
$$$.$$$$$$$$$.$$$
..$………..$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
..$…$..
$$$.$.$$$
$…$…$
$.$$$$$.$
$…$…$
$$$.$.$$$
..$…$..
..$$$$$..
..$………..$..
$$$.$$$$$$$$$.$$$
$…$…….$…$
$.$$$.$$$$$.$$$.$
$.$…$…$…$.$
$.$.$$$.$.$$$.$.$
$.$.$…$…$.$.$
$.$.$.$$$$$.$.$.$
$.$.$…$…$.$.$
$.$.$$$.$.$$$.$.$
$.$…$…$…$.$
$.$$$.$$$$$.$$$.$
$…$…….$…$
$$$.$$$$$$$$$.$$$
..$………..$..
..$$$$$$$$$$$$$..
#include <stdio.h>
#include <stdlib.h>
//思路:先摆放左上角所有$图案,然后通过对称画出其他部分
//打印十字图
void Decphoto(int n)
{
int row = 0, col = 0, i = 0, j = 0, center = 0;
int space = 0, num_s = 0, t = 0;
row = col = 4*(n-1)+9; //n层时,数组大小
int **arr = (int **)malloc(sizeof(int *)*row);//开辟一维
for (i = 0; i < row; ++i) //动态开辟二维数组空间
arr[i] = (int *)malloc(sizeof(int)*col);
center = (row-1)/2; //数组最中部那点坐标
for (i = 0; i < row; ++i) //全部初始化为‘.’
for (j = 0; j < col; ++j)
arr[i][j] = ‘.’;
for (i = center-1; i <= center; ++i) //摆放中心十字图
{
arr[center][i] = ‘$’;
arr[i][center] = ‘$’;
}
space = center; //摆放$时,前面跳过个数space
t = num_s = 1; //需要连续摆放num_s个$
//(A区域),(C区域)
for (i = center-2; i >= 0; i -= 2) //摆放上面到中心和左边到中心‘$’型
{ //这里从中心往外围摆放$
for (j = space; t > 0; ++j)
{
arr[i][j] = ‘$’;
arr[j][i] = ‘$’;
–t;
}
space -= 2; //注意观察规律
t = num_s += 2;
}
//(B区域)
for (i = 1; i < center-1; i += 2) //摆放中上对角线
arr[i][i+1] = ‘$’;
for (i = 2; i < center; i += 2) //摆放正对角线
arr[i][i] = ‘$’;
for (i = 2; i < center-1; i += 2) //摆放中下对角线
arr[i][i-1] = ‘$’;
//至此,左上角的图案全部摆放完毕(然后通过对称性…)
//(对称性 对折图形)
for (i = 0; i < (row+1)/2; ++i) //沿对角线对折
for (j = 0; j < (col+1)/2; ++j)
arr[row-i-1][col-j-1] = arr[i][j];
for (i = 0; i < (row+1)/2; ++i) //沿列中线对折
for (j = 0; j < (col+1)/2; ++j)
arr[i][col-j-1] = arr[i][j];
for (i = 0; i < (row+1)/2; ++i) //沿行中线对折
for (j = 0; j < (col+1)/2; ++j)
arr[row-i-1][j] = arr[i][j];
for (i = 0; i < row; ++i) //打印十字图
{
for (j = 0; j < col; ++j)
printf(“%c”,arr[i][j]);
printf(“\n”);
}
return;
}
//主函数
int main()
{
int n = 0;
scanf(“%d”,&n);
Decphoto(n);
return 0;
}
原帖: