《算法笔记》3.3-图形输出-题解

算法笔记3.3-A题-输出梯形

题目链接

//图形输出主要在于找清楚输出图案数量与行,列之间的数量关系
#include <cstdio>
const char ch =  '*';
int main(void)
{
	int N;
	while(scanf("%d", &N) != EOF)
	{
		int tot = N + 2 * (N - 1);
		for(int i = 1; i <= N; i++)
		{
			for(int j = 1; j <= tot; j++)
			{
				if(j <= (N - i) * 2) printf(" ");
				else printf("%c", ch);
			}
			printf("\n");
		}
	}
	return 0;
}

算法笔记3.3-B题-Hello World for U

题目链接

#include <cstdio>
#include <cstring>
char str[100];
int main(void)
{
	scanf("%s", &str);
	int len = strlen(str), n1 = (len + 2) / 3, n3 = n1, n2 = len + 2 - n1 - n3;		//这是根据题意推导的公式
	for(int i = 0; i < n1 - 1; i++)
	{
			for(int j = 0; j < n2; j++)
			{
				if(j == 0) printf("%c", str[j + i]);
				else if(j == n2 - 1) printf("%c", str[len - i - 1]);
				else printf(" ");
			}
		printf("\n");
	}
	for(int i = 0; i < n2; i++)
		printf("%c", str[n1 + i - 1]);
	return 0;
}

算法笔记3.3-C题-等腰梯形

题目链接

#include <cstdio>
const char ch = '*';
int main(void)
{
	int N, M;
	scanf("%d", &M);
	while(M--)
	{
		scanf("%d", &N);
		int tot = N + 2*(N-1);	//每层总数
		for(int i = 1; i <= N; i++)
		{
			for(int k = 1; k <= N - i; k++)
				printf(" ");
			for(int j = 1; j <= N + 2 * (i - 1); j++)
				printf("%c", ch);
			printf("\n");
		}
	}
	return 0;
}

算法笔记3.3-D题-沙漏图形 tri2str [1*+]

题目链接

#include <cstdio>
const char ch = '*';
int main(void)
{
	int n;
	while(scanf("%d", &n) != EOF)
	{
		for(int i = 1; i <= n; i++)		//倒三角输出
		{
			for(int j = 1; j <= i - 1; j++)
				printf(" ");
			int flag = 1;
			for(int k = i - 1; k <= 2 * n - i; k++)
			{
				if(flag) {printf("%c", ch); flag = 0;}
				else {printf(" "); flag = 1;}
			}
			printf("\n");
		}
		//正三角输出,由于对称性,所以直接把倒三角倒数两层反着输出就行了
         for(int i = n - 1; i >= 1; i--)		
		{
			for(int j = 1; j <= i - 1; j++)
				printf(" ");
			int flag = 1;
			for(int k = i - 1; k <= 2 * n - i; k++)
			{
				if(flag) {printf("%c", ch); flag = 0;}
				else {printf(" "); flag = 1;}
			}
			printf("\n");
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/LittleSmallCindy/article/details/107807244
今日推荐