HDU 2074 叠筐
http://acm.hdu.edu.cn/showproblem.php?pid=2074
Problem Description
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
Input
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
Output
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
Sample Input
11 B A
5 @ W
Sample Output
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
char zzt[maxn],wbd[maxn];
char pig[100][100];
int n;
int cnt=0;
void A(int x)//第 x 圈,最外第一圈
{
//左上角是 a[x][x],右下角是 a[n-x+1][n-x+1]
char cmz;
if(x%2==0)
cmz=zzt[0];
else
cmz=wbd[0];
for(int i=x; i<=n-x+1; i++)
pig[x][i]=cmz;
for(int i=x; i<=n-x+1; i++)
pig[n-x+1][i]=cmz;
for(int i=x; i<=n-x+1; i++)
pig[i][x]=cmz;
for(int i=x; i<=n-x+1; i++)
pig[i][n-x+1]=cmz;
}
int main()
{
while(~scanf("%d",&n))
{
cnt++;
if(cnt!=1)
printf("\n");
scanf("%s%s",zzt,wbd);
if(n==1)
{
printf("%c\n",zzt[0]);
continue;
}
if(((n+1)/2)%2==1)
swap(zzt[0],wbd[0]);
for(int i=1; i<=(n+1)/2; i++)
{
A(i);
}
pig[1][1]=' ';
pig[1][n]=' ';
pig[n][1]=' ';
pig[n][n]=' ';
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
printf("%c",pig[i][j]);
}
printf("\n");
}
}
return 0;
}

浙公网安备 33010602011771号