每日一题(二):排版题

1.输入一个高度h,输出一个高度为h,上底边为h的梯形。

#include<stdio.h>
int main() {
	int h;
	while (scanf("%d", &h) != EOF) {
		int maxLine = h + (h - 1) * 2;
		for (int i = 0; i < h; i++) {
			for (int j = 0; j < maxLine; j++) {
				if (j < maxLine - h - i * 2 )
					printf(" ");
				else
					printf("*");
			}
			printf("\n");
		}
	}
	return 0;
}

2.叠框

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

输入
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;

输出
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
 

#include<stdio.h>

int main() {
	int outPutBuf[82][82];    //用于预排版的输出缓存
	char a, b;
	int n;
	bool firstCase = true;
	while (scanf("%d %c %c", &n, &a, &b) == 3) {
		if (firstCase == true)
			firstCase = false;
		else printf("\n");
		for (int i = 1, j = 1; i <= n; i += 2, j++) {  //从里至外输出每个圈
			int x = n / 2 + 1;
			int 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;
}

猜你喜欢

转载自blog.csdn.net/lyc44813418/article/details/86519326