http://acm.hdu.edu.cn/showproblem.php?pid=2074
这道题目以前做过的,用调用函数将map一圈一圈的画,我觉得这个很容易理解先画最外面的一圈,直到x>y,也就是中间那个画完,可是注意有两点:1.注意当n=1的时候输去第一个,2.注意输出的格式,最后没有空行,我PE好多次,原来是把put("")写成了puts(" "),然后我把它改为printf("\n");就ac了,悲剧的一题啊
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
char map[80][80],a[2][3];
void mmm(int x,int y,int k)
{
if(x>y) return;
for(int i=x;i<=y;++i)
map[i][x]=map[x][i]=map[i][y]=map[y][i]=a[k%2][0];
mmm(x+1,y-1,k+1);
}//一圈一圈的画,递归
int main()
{
int n,flag=0;
while(scanf("%d",&n)!=EOF)
{
if(flag>0)
printf("\n");
flag++;
memset(map,0,sizeof(map));
scanf("%s%s",a[0],a[1]);
if(n==1) {puts(a[0]);continue;}
if(((n+1)/2)%2)
mmm(0,n-1,0);
else
mmm(0,n-1,1);
map[0][n-1]=map[0][0]=map[n-1][0]=map[n-1][n-1]=' ';
for(int i=0;i<n;++i)
{
puts(map[i]);
}
}
// system("pause");
return 0;
}