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@ @@@ |
(第二次做 坑在于:n=1时,一定要注意边界值)
# include<iostream>
# include<string>
# include<vector>
# include<algorithm>
# include<cmath>
# include<cstdio>
# include<map>
using namespace std;
char a[81][81];
void setHorizontalLine(int fix, int start, int end, char content) {
for (int i = start; i <= end; i++) {
a[i][fix] = content;
}
}
void setVerticalLine(int fix, int start, int end, char content) {
for (int i = start; i <= end; i++) {
a[fix][i] = content;
}
}
void eraseVex(int n) {
a[1][1] = ' ';
a[1][n] = ' ';
a[n][1] = ' ';
a[n][n] = ' ';
}
bool isFirst = true;
int main() {
int n; // 外框尺寸
char in, out;
while(cin >> n >> in >> out) {
a[81][81] = {' '};
if(n == 1 ) {
a[1][1] = in;
} else {
int center = (n + 1) / 2;
a[center][center] = in;
for (int i = 1 ; i <= n / 2; i++) { //第一层 到 第五层
int length = i * 2 + 1;
char content = in;
if (i % 2 == 1) {
content = out;
}
//左右侧
setHorizontalLine( center - i, center - i, center + i, content);
setHorizontalLine( center + i, center - i, center + i, content);
// 上下册
setVerticalLine( center + i, center - i, center + i, content);
setVerticalLine( center - i, center - i, center + i, content);
}
eraseVex(n);
}
if (isFirst) {
for (int i = 1; i <= n; i ++) {
for (int j = 1 ; j <= n ; j++) {
cout << a[i][j];
}
cout << endl;
}
isFirst = false;
} else {
cout<<endl;
for (int i = 1; i <= n; i ++) {
for (int j = 1 ; j <= n ; j++) {
cout << a[i][j];
}
cout << endl;
}
}
}
}
#include <iostream>
#include <algorithm>
using namespace std;
char maze[101][101];
int n;
char ch1,ch2;
bool isFirst = true;
void drawShu(int pos,int startIndex,int endIndex,char ch) {
for (int i = startIndex; i <= endIndex; i++) {
maze[i][pos] = ch;
}
}
void drawHeng(int pos,int startIndex,int endIndex,char ch) {
for (int i = startIndex; i <= endIndex; i++) {
maze[pos][i] = ch;
}
}
void show() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << maze[i][j];
}
cout << endl;
}
}
int main() {
while (cin >> n >> ch1 >> ch2) {
if(n == 1) {
if (isFirst) {
cout << ch1 << endl;
isFirst = false;
} else {
cout << endl;
cout << ch1 << endl;
}
continue;
}
int centerY = (n + 1 )/ 2 ;
int centerX = centerY ;
maze[centerY][centerX] = ch1;
char ch;
for (int i = 1; i <= centerY - 1; i++) {
if ( i % 2 == 1) {
ch = ch2;
} else {
ch = ch1;
}
// zuo you
drawShu(centerX - i,centerY - i,centerY + i,ch);
drawShu(centerX + i,centerY - i,centerY + i,ch);
// 上下
drawHeng(centerY - i,centerX - i,centerX + i,ch);
drawHeng(centerY + i,centerX - i,centerX + i,ch);
}
maze[1][1] = maze[1][n] = ' ';
maze[n][1] = maze[n][n] = ' ';
if (isFirst) {
show();
isFirst = false;
} else {
cout << endl;
show();
}
}
}