字节跳动游戏测开——遇到的题目

  • Post author:
  • Post category:其他



描述:


给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。

运行时间限制: 10 Sec

内存限制: 128 MByte


输入:


测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标(x y) 占一行,其中|x|和|y|小于 1000;


一对(0,0) 坐标标志着一个测试用例的结束


。注意(0, 0)不作为任何一个测试用例里面的点。


一个没有点的测试用例标志着整个输入的结束





输出:


对每个测试用例,在1行内输出2对整数,其间用一个空格隔开。第1对整数是长方形框左下角的坐标,第2对整数是长方形框右上角的坐标。

如果只是一个点或者一条线,不输出。例如:

12 34

0 0

只是一个点,不是长方形,不输出。

样例输入:

12 56

23 56

13 10

0 0

12 34

0 0

0 0

样例输出:

12 10 23 56

这道题没有给定测试case的数量,所以要用while(1){…}语句一直接受不同的输入数据。而且要注意,变量的声明在外面,但是初始化要在每次输入的内部,这样才不会影响到每个case。首先一个while(1){…}语句来接受不同的cases,在循环体内部首先要考察,当一开始输入的是0 0直接表示测试用例结束,然后进行循环while(cin>>x>>y),接受每组case中的不同坐标,当然结束仍然以0 0。结束内层循环后,按照题目的格式输出。

#include<iostream>
using namespace std;
int main() {
	int left_x,left_y, right_x,right_y;
	int x, y;
	while (1) {
		cin >> x >> y;
		if (x == 0 && y == 0)    break;
		left_x = right_x = x;
		left_y = right_y = y;
		while (cin >> x >> y) {
			if (x == 0 && y == 0)    break;
			if (x<left_x)    left_x = x;
			if (x>right_x)    right_x = x;
			if (y<left_y)    left_y = y;
			if (y>right_y)    right_y = y;
		}
		printf("%d %d %d %d\n", left_x, left_y, right_x, right_y);
	}
	return 0;
}

总结:题目真的很简单,不过第一次做笔试题真的弄了很久,完全不知道哪有问题!就看着通过case 0.00%!我晕!后来和别人讨论了之后才晓得,笔试题输入输出的写法也是一种能力的考察!所以还是不要抱怨把!好好积累一下!



版权声明:本文为qq_34269988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。