C语言 魔王的正方形

题目描述

传说在遥远的过去,有一个大魔王盘踞在ACM/ICPC实验室里。

大魔王非常强大,而且他旗下有甲乙丙丁四大护法,想要见到大魔王,勇士必须一一打倒甲乙丙丁这四位护法。

这天,新的勇士带领着他的队友又一次的向实验室发起了进攻。迎接他们的,首先是甲护法。

甲护法最近沉迷正方形,立志把实验室里所有的长方形都裁剪为正方形。他告诉勇士,实验室里有T个长方形,每个长方形的边平行于坐标系的X轴或者Y轴。甲护法会给出每一个长方形对角线上的顶点A、B的坐标,勇士保持A坐标不变,把长方形改成比原来长方形小的最大的正方形,并得出新正方形的A、B1、C1、D1四点坐标(顺时针),那就算勇士赢了。

亲爱的勇士,赢了这位护法,就离大魔王更近了呢!

输入

第一行包含一个数字T(T <= 100), 表示测试数据组数。

接下来T行,每一行包括4个整数x1、y1、x2、y2(-100000 <= x1, y1,x2,y2 <= 100000),分别表示A、B两点的坐标。

输出

每组输入对应输出一行8个整数,表示正方形的A、B1、C1、D1四点坐标(顺时针)。

样例输入 Copy

2
0 0 2 3
3 2 -1 -1

样例输出 Copy

0 0 0 2 2 2 2 0
3 2 3 -1 0 -1 0 2

代码

#include<stdio.h>
#include<math.h>
int main()
{
	int n,x1,x2,y1,y2,c,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
		c=fabs(x1-x2);
		if(fabs(y1-y2)<c)c=fabs(y1-y2);
		if(x1>x2&&y1>y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1,y1-c,x1-c,y1-c,x1-c,y1);
		if(x1<x2&&y1<y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1,y1+c,x1+c,y1+c,x1+c,y1);
		if(x1>x2&&y1<y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1-c,y1,x1-c,y1+c,x1,y1+c);
		if(x1<x2&&y1>y2)printf("%d %d %d %d %d %d %d %d\n",x1,y1,x1+c,y1,x1+c,y1-c,x1,y1-c);
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shuo..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值