-
题目描述:
-
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
-
输入:
-
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
-
输出:
-
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
-
样例输入:
-
11 B A 5 @ W
-
样例输出:
-
AAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAA @@@ @WWW@ @W@W@ @WWW@ @@@
-
代码如下:
-
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; char map[80][80]; void draw(char m[82][82], char c, int begin, int end) { for(int i = begin; i < end; i++){ for(int j = begin; j < end; j++){ map[i][j] = c; } } } int main() { int n; char c1, c2; char c[2]; while(scanf("%d %c %c", &n, &c1, &c2) != EOF){ if(n<=0 || n>=80){ break; } if(((n-1)/2)%2){ c[1] = c1; c[0] = c2; } else{ c[0] = c1; c[1] = c2; } for(int i = 0; i < n; i++){ draw(map, c[i%2], i, n-i); } if(n>1){ map[0][0] = ' '; map[0][n-1] = ' '; map[n-1][0] = ' '; map[n-1][n-1] = ' '; } for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ printf("%c", map[i][j]); } printf("\n"); } printf("\n"); } return 0; }
PS:注意while循环处要加 !=EOF,不然会出现Output Limit Exceed的错误。。