以上就是题目
根据那个坑爹提示,曾以为还要计算很多公式
只要把题解出来就可以嘛(也许推出公式之类的更快一些吧...)
我的思路算是把暴力推演到了极致
大致的思路在注释里
#include
#include
/*
13 6
9 4
5
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
*/
void init_array(char array[135][135], char c)
{
for(int i; i < 135; i++)
{
for(int j = 0; j < 135; j++)
{
array[i][j] = c;
}
}
}
//数组 arr 第 i 行 j 列赋值 num 个 c
void row_char(char arr[135][135], int row, int column, int num, char c)
{
for(int i = 0; i < num; i++, column++)
{
arr[row][column] = c;
}
}
void column_char(char arr[135][135], int row, int column, int num,char c)
{
for(int i = 0; i < num; i++, row++)
{
arr[row][column] = c;
}
}
//初始化画板
void init_canvas(char canvas[135][135], int row, int column)
{
int mid = row / 2;
row_char(canvas, mid, mid - 2, 5, '$');
column_char(canvas, mid - 2, mid, 5, '$');
}
int check_around(char arr[135][135], int row, int column, int ri, int cj, char c)
{
int flag = 0;
for(int i = -1; i <= 1; i++)
{
for(int j = -1; j <= 1; j++)
{
if(ri + i < 0 || ri + i > row || cj + j < 0 || cj + j > column)
{
continue;
}
if(arr[ri + i][cj + j] == c)
{
flag++;
return flag;
}
}
}
return 0;
}
//
void scan_char(char arr[135][135], int row, int column, char check,char fu)
{
for(int i = 0; i < row; i++)
{
for(int j = 0; j < column; j++)
{
if(arr[i][j] == ' ' && check_around(arr, row, column, i, j, check))
{
arr[i][j] = fu;
}
}
}
}
void end(char arr[135][135], int row, int column)
{
for(int i = 0; i < row; i++)
{
for(int j = 0; j < column; j++)
{
if(arr[i][j] == ' ')
{
arr[i][j] = '.';
}
}
}
}
void printf_list(char arr[135][135], int row, int column)
{
for(int i = 0; i < row; i++)
{
for(int j = 0; j < column; j++)
{
printf("%c", arr[j][i]);
}
printf("\n");
}
}
int main()
{
char canvas[135][135];//画布
int row = 5, column = 5, danwei = 4;
int ceng = 0;
int flag = 0;//0 代表. 1 代表 $
//初始化字符串
init_array(canvas, ' ');
//输入层数, 计算实际画布大小
scanf("%d", &ceng);
row = row + ceng * danwei;
column = column + ceng * danwei;
//在画布中间画一个十字
init_canvas(canvas, row, column);
//开始一圈一圈从中间赋值
for(int i = 0; i < ceng * 2; i++, flag = !flag)
{
//check 代表检查的字符, fu 代表要赋值的字符
char check, fu;
if(flag == 0)
{
check = '$', fu = '.';
scan_char(canvas, row, column, check, fu);
} else {
check = '.', fu = '$';
scan_char(canvas, row, column, check, fu);
}
}
//最后一步将数组中所有的空格字符赋值为 '.'
end(canvas, row, column);
printf_list(canvas, row, column);
//大功告成
return 0;
}
看着这暴力的代码有点汗颜...
网友评论