本文主要是介绍排版题 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*题目1432 叠筐
题目描述:
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
输入:
输入是一个个的三元组,分别是,外筐尺寸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 <stdio.h> //没有明显上到下,左到右规律,先排版,再输出
int main(){
int outputbuf[82][82]; //用于预排版的输出缓存
char a,b; //输入的两个字符
int n; //叠筐大小
int i,j,k;
bool firstcase = true; //是否为第一组数据标志,初始值为true
while(scanf("%d %c %c",&n,&a,&b) == 3){
if(firstcase == true) { //若是第一组数据
firstcase = false; //将第一组数据标志标记成false
}
else printf("\n"); // 否则输出换行
for(i=1,j=1;i<=n;i+=2,j++){//从里到外输出每个圈,i表示长度每次加2
int x=n/2 +1,y=x;
x-=j-1;y-=j-1; //计算每个圈左上角点的坐标
char c=j%2 == 1 ? a:b;//计算当前圈需要使用哪个字符
for(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){//注意当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;
}
这篇关于排版题 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!