HDU_2074叠筐
2014-05-05 17:35
316 查看
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
[align=left]Input[/align]
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
[align=left]Output[/align]
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
[align=left]Sample Input[/align]
[align=left]Sample Output[/align]
代码:
题意很好理解,关键是总结输出图案的规律:
很明显这里的n有两种情况,(n+1)/2%2为奇数或偶数。
首先把输入的两个字符放入字符数组中。(第一个放在下标"0"的位置,第二个放在下标"1"的位置)
把图案看做是在一个二维(n*n)的方格中添加字符,字符是一圈一圈加的,先把方格初始化为“0”和“1”,
观察出每两个圈的规律相同并且关于中间对称,模拟两个半圈即可。
第一个半圈,列从1到(n+1)/2,第一行都相同,第二行也都相同;(除去首尾)
第二个半圈,列从2到n/2,行从2到n/2都相同。
根据赋值情况“0”和“1”输出字符.
注意:
输出两端的空格,如果n=1时,直接输出。
样例与样例之间,输入空一行输出再输入空一行,见下图:
11 B A
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
5 @ W
@@@
@WWW@
@W@W@
@WWW@
@@@
[align=left]Input[/align]
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
[align=left]Output[/align]
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
[align=left]Sample Input[/align]
11 B A 5 @ W
[align=left]Sample Output[/align]
AAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAAA @@@ @WWW@ @W@W@ @WWW@ @@@
代码:
#include <cstdio> #include <cstring> using namespace std; int f[81][81]; int main() { char a[2]; int n,x,y,i,j; y = 0; while(scanf("%d %c %c",&n,&a[0],&a[1])!=EOF) { getchar(); if(x) printf("\n"); y=1; if((n+1)/2%2==0) y=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if((i%2)==0) f[i][j]=(y+1)%2; else f[i][j]=y; } } for(i=1;i<=(n+1)/2;i++) { f[i][0]=f[i-1][0]; f[i+1][1]=f[i][1]; } for(i=2;i<=n/2;i++) { for(j=2;j<=n/2;j++) { f[i][j]=f[i-2][j-2]; } } for(i=0;i<=n/2;i++) for(j=0;j<=n/2;j++) { f[n-i-1][j]=f[i][j]; f[i][n-1-j]=f[i][j]; f[n-1-i][n-1-j]=f[i][j]; } if(n==1) { printf("%c\n",a[0]); continue; } else for(i=0;i<n;i++) { for(j=0;j<n;j++) { if((!i&&!j)||(!i&&j==n-1)||(!j&&i==n-1)||(i==j&&i==n-1)) printf(" "); else printf("%c",a[f[i][j]]); } printf("\n"); } x=1; } return 0; }思路解析:
题意很好理解,关键是总结输出图案的规律:
很明显这里的n有两种情况,(n+1)/2%2为奇数或偶数。
首先把输入的两个字符放入字符数组中。(第一个放在下标"0"的位置,第二个放在下标"1"的位置)
把图案看做是在一个二维(n*n)的方格中添加字符,字符是一圈一圈加的,先把方格初始化为“0”和“1”,
观察出每两个圈的规律相同并且关于中间对称,模拟两个半圈即可。
第一个半圈,列从1到(n+1)/2,第一行都相同,第二行也都相同;(除去首尾)
第二个半圈,列从2到n/2,行从2到n/2都相同。
根据赋值情况“0”和“1”输出字符.
注意:
输出两端的空格,如果n=1时,直接输出。
样例与样例之间,输入空一行输出再输入空一行,见下图:
11 B A
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
5 @ W
@@@
@WWW@
@W@W@
@WWW@
@@@
相关文章推荐
- HDU 2074 叠筐
- hdu 4544 叛逆的小明 -- 数字反转 和 hdu 2074 叠筐(水题)
- hdu 杭电2074 叠筐
- hdu 2074
- hdu 2074 叠筐 好有意思的画图题
- HDU - 2074 叠筐(字符图案)
- hdu-oj 2074 叠筐
- HDU 2074 叠筐 (字符处理)
- hdu 2074 叠框
- hdu 2074 输出图形
- HDU - 2074
- hdu 2074 堆放篮 好开心图纸标题
- HDU 2074 叠筐
- HDU 2074 叠筐
- HDU_2074 叠筐
- HDU 2074 叠筐
- hdu 2074 叠筐(数论)
- hdu 2074 叠筐
- hdu 2074 叠筐
- hdu 2074 叠筐 好有意思的绘图题