叠筐
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10111 Accepted Submission(s): 2548
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@
@@@
总结: 这道题 水题一道,关键有三点要注意 1:中间的花色问题,我们用m=(n-1)/2;m=m%2来控制中间的花色;2:要留意n==1的情况, WA了好几次,最后仔细检查了一下,才发现少了这种情况;3:WA的问题解决之后有出现了PE问题,在仔细看看题才知道,只是在叠筐与叠筐之间(即两个输出之间)才有空行。
import java.util.*; import java.io.*; public class T2074 { public static void main(String[] args) { Scanner sc = new Scanner(new BufferedInputStream(System.in)); int bh=0; while (sc.hasNext()) { int n = sc.nextInt(); String s1 = sc.next(); String s2 = sc.next(); // 控制叠筐与叠筐之间(即两个输出之间)的空行 if(bh==0) bh=1; else{ System.out.println(); } String str[][] = new String[81][81]; //控制中间的花色 int m = (n - 1) / 2; if (m % 2 != 0) { String t; t = s1; s1 = s2; s2 = t; } //分两种情况,n==1和n!=1的情况 if (n == 1) System.out.println(s1); else { String st = " "; for (int i = 0; i < n - 2; i++) { st += s1; } st += " "; str[0][0] = st; boolean bb = true; for (int i = 1; i <= n / 2; i++) { boolean b = true; int k = 0; for (int j = 1; j <= i; j++) { if (b == true) { b = false; str[i][k++] = s1; } else { b = true; str[i][k++] = s2; } } if (bb) { bb = false; for (int j = i; j < n - i; j++) { str[i][k++] = s2; } } else { bb = true; for (int j = i; j < n - i; j++) { str[i][k++] = s1; } } for (int j = 1; j <= i; j++) { if (b == false) { b = true; str[i][k++] = s1; } else { b = false; str[i][k++] = s2; } } } for (int i = 0; i <= n / 2; i++) { for (int j = 0; j < n; j++) { if (str[i][j] != null) System.out.print(str[i][j]); } System.out.println(); } for (int i = n / 2 - 1; i >= 0; i--) { for (int j = 0; j < n; j++) { if (str[i][j] != null) System.out.print(str[i][j]); } System.out.println(); } } } } }