您的位置:首页 > 其它

hdu 2074 叠框

2016-09-22 22:57 246 查看
E - 叠筐
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status

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@
@@@
思路:这题有很多的做法,也可以直接暴力输出,我是根据规律来变得,开一个二维字符数组,当i>j时就要变一下,j>=n-1-i时也要变,我每次取每一行的前面的比后面的少一个,因为这样还可以经过循环变回来,比如第三行 前面的 A B 后面为 A B A 这好为一个循环,另外哪一个元素在外面 看 (n-1)%4==?  不等于0 则交换位置  等于则不变
ac代码:
#include<stdio.h>
int main()
{   char map[100][100] ;
int n,i,j,flag=0;
char a,c,t,mark;
while(scanf("%d %c %c",&n,&a,&c)!=EOF)
{
if(flag)
printf("\n");
flag=1;
if((n-1)%4)
{   t=a;
a=c;
c=t;
}
for(i=0;i<=n/2;i++)
{   t=a;
mark=1;
for(j=0;j<n;j++)
{    if((i==0&&n!=1&&(j==0||j==n-1)))
{  putchar(' ');
map[i][j]=' ';
continue;
}
map[i][j]=t;
putchar(t);
if(i>j||j>=n-1-i)
{   if(mark)
{  t=c;
mark=0;
}
else
{  t=a;
mark=1;
}
}

}
putchar('\n');
}
for(i=n/2-1;i>=0;i--)
{     for(j=0;j<n;j++)
printf("%c",map[i][j]);
putchar('\n');
}
}
}
hdu 2074
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  暴力 数学