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;
}
发布了47 篇原创文章 · 获赞 29 · 访问量 1476

猜你喜欢

转载自blog.csdn.net/Qianzshuo/article/details/103759158
今日推荐