题目1432:叠筐
时间限制:
1 秒
内存限制:
128 兆
特殊判题:
否
提交:
8118
解决:
1988
题目描述:
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
输入:
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
输出:
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
样例输入:
11 B A
5 @ W
样例输出:
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
#include<iostream>
using namespace std;
#include<stdio.h>
int main(){
int n;
char a,b;
int outPutBuf[82][82];//用于预排版的输出缓存
bool first=true;//是否为第一组数据标志
while(scanf("%d %c %c",&n,&a,&b)==3){//此处scanf 之间必须有空格,否则会将空格赋值给%c
if(first==true){
first=false;//若是第一组数据标志标记成false
}
else printf("\n");
for(int i=1,j=1;i<=n;i+=2,j++){
int x=n/2+1,y=x;//中心点坐标
x-=j-1;
y-=j-1;//计算 每个圈右上角点的坐标
char c=j%2==1?a:b;//计算当前圈需要使用哪个字符
for(int k=1;k<=i;k++){//对当前圈进行赋值
outPutBuf[x+k-1][y]=c;//左边赋值
outPutBuf[x][y+k-1]=c;//上
outPutBuf[x+i-1][y+k-1]=c;//右
outPutBuf[x+k-1][y+i-1]=c; //下
}
}
if(n!=1){
outPutBuf[1][1]=' ';
outPutBuf[n][1]=' ';
outPutBuf[1][n]=' ';
outPutBuf[n][n]=' ';
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%c",outPutBuf[i][j]);
}
printf("\n");
}
}
return 0;
}
九度oj 1432 叠筐
最新推荐文章于 2023-03-22 20:58:48 发布