【题】
输出字符回形阵
输入图形行数N和中心字符,输出如图所示回形方阵。
例如,输入:5 Z
输出如下图形:
X X X X X
X Y Y Y X
X Y Z Y X
X Y Y Y X
X X X X X
注:N<24,且N是奇数。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 无限制 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 无限制 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 无限制 | 64M | 0 |
【代码】
#include <stdio.h>
#define N 100
void Output(char arr[][N],int n);
void Init(char arr[][N], int n);
void Func(char arr[][N], int n, char ch);
int main( )
{
int n;
char ch, arr[N][N];
scanf("%d", &n);
getchar();
ch = getchar();
//putchar(ch);
if(n % 2 == 0)
{
printf("%d is not a odd number!\n", n);
return 0;
}
Init(arr, n);
//Output(arr, n);
Func(arr, n, ch);
Output(arr, n);
return 0;
}
void Func(char arr[][N], int n, char ch)
{
int i, j;
char tmpCh;
for(i = 0; i <= n / 2; i++)
{
if(ch >= 'A' && ch <= 'Z')
tmpCh = (ch - 'A' - (n/2-i) + 26*(n/2/26+ 1)) % 26 + 'A';
else
tmpCh = (ch - 'a' - (n/2-i) + 26*(n/2/26+ 1)) % 26 + 'a';
for(j = 0; j < n; j++) //上侧
if(arr[i][j] == '\0')
arr[i][j] = tmpCh;
for(j = 0; j < n; j++) //右侧
if(arr[j][n-1-i] == '\0')
arr[j][n-1-i] = tmpCh;
for(j = 0; j < n; j++) //左侧
if(arr[j][i] == '\0')
arr[j][i] = tmpCh;
for(j = 0; j < n; j++) //下侧
if(arr[n-1-i][j] == '\0')
arr[n-1-i][j] = tmpCh;
}
}
void Init(char arr[][N], int n)
{
int i, j;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
arr[i][j] = '\0';
}
}
void Output(char arr[][N], int n)
{
int i, j;
for(i = 0; i < n; i++)
{
for(j = 0; j < n-1; j++)
printf("%c ", arr[i][j]);
printf("%c\n", arr[i][j]);
}
}