排版题(1)

题目描述:

把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

输入:

输入是一个个的三元组,分别是,外筐尺寸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>


//本题的解决方法:先完成排版,再进行输出
//先将要输出的结果存储在二维数组中,再输出数组

char result[82][82];
int main()
{
	int firstLine = 1;
	int n;
	char a,b;

	//程序按照最内圈到最外圈的顺序来完成图形的排列
	//在完成每圈排列时要注意两点:首先需要确定该圈左上角的坐标
	//最中间圈的左上角字符坐标为(n/2+1,n/2+1),次中间圈的左上角字符坐标为(n/2+1-1,n/2+1-1),依次类推
	//                             其次需要计算该圈每边的边长
	//中心圈长度为1,次中心圈长度为3,依次类推
	//明确每圈用哪个字符填充,最中间圈用第一个字符,次中间圈用第二个字符,次次中间圈用第一个字符,依次周期循环。

	while(scanf("%d %c %c",&n,&a,&b) != EOF){
		if(firstLine != 1){  //处理题目中“叠框与叠框之间应有一行间隔”的要求
			printf("\n");    //除了在第一个叠框输出前不多输出一个空行外,在其他每一个叠框输出前都要额外输出一个空行
		}else{
			firstLine = 0;
		}
		
		int middle = (n/2)+1;//计算整个图形的中间行号
		int x = middle;      //x,y初始化为最中间圈左上角的坐标(事实上最中间圈也只占一个字符)
		int y = middle;
		for(int i =1,j = 1;j<=middle;j++,i = i+2){  //行数为n的图形,共有(n/2+1)圈,j是第几圈的计数器 i是第j圈(每圈都是正方形)的边长
			char temp = j%2==0?b:a;  //最中间圈--j为1--第一个字符---也就是说j为奇数是第一个字符,j为偶数是第二个字符
			x = middle-j+1;          //计算每圈左上角的坐标
			y = middle-j+1;
			for(int k =0;k <i;k++){  //填充每圈(每一圈只填充边界)
				if(k ==0 || k == i-1){  //若为该圈的第一行或最后一行---则都填满
					for(int t = 0;t <i;t++){   
						result[x+k][y+t]=temp;
					}
				}else{                  //若非该圈的第一行或最后一行---则只在该行的第一个和最后一个位置填上相应字符
					result[x+k][y]=temp;
					result[x+k][y+i-1]=temp;
				}
			}
		}
		if(n != 1){                     //在n大于1的情况下,每个输出图形最外圈的四个角为空
			result[1][1] = ' ';
			result[n][n] = ' ';
			result[1][n] = ' ';
			result[n][1] = ' ';
		}
		for(int i = 1;i <=n;i++){
			for(int j =1;j <=n;j++){
				printf("%c",result[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
}

 

 

注明---该博客为本人王道的学习笔记记录,博客中有些总结是引用王道机试一书的。


                
LaTeX是一种优秀的排版工具,适用于各种文档的编辑和排版,包括课后习。使用LaTeX排版课后习具有以下几个优点。 首先,LaTeX提供了丰富的数学公式编辑功能,适用于课后习的数学符号和公式排版。通过使用LaTeX的数学环境,可以轻松输入各种复杂的数学公式,包括上下标、分数、根号、积分等,使习的数学内容更加清晰和美观。 其次,LaTeX具有良好的格式控制能力,可以方便地设置习的标目和解答等内容的字体、字号和对齐方式。通过合理的使用LaTeX的命令和宏包,能够灵活地调整习排版的各个方面,使其符合教材要求和个人喜好。 此外,LaTeX还支持自动编号和交叉引用功能。在排版时,我们可以使用LaTeX提供的自动编号命令,如\enumerate和\item命令来方便地对习进行编号,同时还可以使用\label和\ref命令进行交叉引用,实现习之间的引用和跳转。 最后,LaTeX的版本控制功能使得多人协作编辑习变得更加便捷。通过使用版本控制工具,如Git,可以方便地进行习的修改、更新和共享。同时,LaTeX的源文件也是纯文本格式,易于管理和修改,有利于习的改进和修改。 总而言之,使用LaTeX排版课后习可以使习更加美观、易读和易于管理,同时也方便了数学公式的输入和编辑,为教师和学生提供了更好的使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值