描述:
给定一系列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%!我晕!后来和别人讨论了之后才晓得,笔试题输入输出的写法也是一种能力的考察!所以还是不要抱怨把!好好积累一下!