题目描述:
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。
输入:
输入一个三元组,分别是外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后两者都为ASCII可见字符。
输出:
输出叠在一起的筐图案,中心花色和外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉,叠筐与叠筐之间应有一层间隔。
样例输入:
样例输出:
题目分析:
要从一个中心出发,渐次围绕中心打印字符,分两步走。1.首先要确定中心字符所在位置。2.然后分别确定左上至左下,左上至右上,左下至右下,右上至右下的for循环打印。
两个注意点:
1.花色是渐变的,可以设置一个代表花色的变量,最外层循环每进行一次循环就交错改变一次。2.注意最后将最外层的边角打磨,即将数组[0][0],[0][n-1],[n-1][0],[n-1][n-1]设置为空
变量设置:
int n;//外框的最大长度
char inner,outer;//内和外的花色
char pattern[80][80] = {0};//初始化二维数组
int length=1;//外框的长度
int x,y;//横纵坐标
char curChar=inner;//用来填充的花色
完整代码:
#include <iostream>//叠框
int main() {
int n;//外框的最大长度
char inner,outer;//内和外的花色
while (scanf("%d %c %c",&n,&inner,&outer)!=EOF){
char pattern[80][80] = {0};//初始化二维数组
int length=1;//外框的长度
int x,y;
char curChar=inner;//用来填充的花色
for(length=1,x=n/2,y=n/2;length<=n;length+=2,--x,--y){
for(int i=x,j=y;i<x+length;++i){//左,上到下
//j不变,i从x到x+length-1
pattern[i][j]=curChar;
}
for(int j=y,i=x;j<y+length;++j){//上,左到右
//i不变
pattern[i][j]=curChar;
}
for(int i=x+length-1,j=y;j<y+length;++j){//下,左到右
pattern[i][j]=curChar;
}
for(int j=y+length-1,i=x;i<x+length;++i){//右,上到下
pattern[i][j]=curChar;
}
//更换花色
if(curChar==inner){
curChar=outer;
}
else{
curChar=inner;
}
}
//如果n不等于1,磨掉四个角
if(n!=1){
pattern[0][0]=' ';
pattern[0][n-1]=' ';
pattern[n-1][0]=' ';
pattern[n-1][n-1]=' ';
}
for(int i=0;i<n;i++){
printf("%s\n",pattern[i]);
}
}
return 0;
}