东华大学2020考研计算机OJ题目解答分享——进阶篇(54)

54 菱形输出

作者: 孙辞海 时间限制: 1S章节: 函数

问题描述 :

明明这次又碰到问题了:

给定一个正整数N,明明的爸爸让他输出一个以Z开始的菱形,以后依次为Y,X…,

比如当N等于1的时候输出图形:

Z

当N等于2的时候,输出图形:(Y前没有空格,Z、X和W前一个空格)

Z

Y X

W

当N等于3的时候,输出图形:

Z

Y X

W V

U T

S

明明发现当N很大的时候就不是很容易了,所以找到了你,希望你编写一个程序帮助他

明明的问题可以归结为:输入一个正整数N,输出一个以Z开始的菱形,以后依次为Y,X…。

输入说明 :

你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数n(1≤n≤7)。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组输出一个以Z开始的菱形,具体格式参照样例输出。每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果之后没有空行。 注:通常,显示屏为标准输出设备。

输入范例 :

1
3

输出范例 :

Z

  Z
 Y X
W   V
 U T
  S

解答思路:

图形题慢慢扣就行。分为三部分输出 第1行 中间行 末尾行
其中中间行前部和中部空格个数都是有规律的。规律在行数与n之间。
中间行的上半部分和下半部分是一样的,用个fabs函数就行了

AC代码

#include <stdio.h>
#include <math.h>
#include <string.h>

int main()
{
	int n;
	
	while(~scanf("%d",&n))
	{
		char s='Z';
		for(int i=0;i<(n-1);i++)
		{
			printf(" ");
		}
		printf("%c\n",s--);
		for(int j=2;j<2*n-1;j++)
		{
			for(int u=0;u<(int)fabs(n-j);u++)
			{
				printf(" ");
			}
			printf("%c",s--);
			for(int v=0;v<2*n-3-2*fabs(n-j);v++)
			{
				printf(" ");
			}
			printf("%c\n",s--);
		}
		if(n!=1)
		{
			for(int i=0;i<(n-1);i++)
			{
				printf(" ");
			}
			printf("%c\n",s--);
		}
	       printf("\n");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值