九度 題目1020:最小長方形
阿新 • • 發佈:2019-01-25
一.題目描述:
給定一系列2維平面點的座標(x, y),其中x和y均為整數,要求用一個最小的長方形框將所有點框在內。長方形框的邊分別平行於x和y座標軸,點落在邊上也算是被框在內。
輸入:
測試輸入包含若干測試用例,每個測試用例由一系列座標組成,每對座標佔一行,其中|x|和|y|小於 231;一對0 座標標誌著一個測試用例的結束。注意(0, 0)不作為任何一個測試用例裡面的點。一個沒有點的測試用例標誌著整個輸入的結束。
輸出:
對每個測試用例,在1行內輸出2對整數,其間用一個空格隔開。第1對整數是長方形框左下角的座標,第2對整數是長方形框右上角的座標。
樣例輸入:
12 56
23 56
13 10
0 0
12 34
0 0
0 0
樣例輸出:
12 10 23 56
12 34 12 34
二.題目分析
本來是一道水題,卻硬是做出了轉狂的感覺。折騰了那麼久,終於找到了出錯的地方,關於九度OJ,我是徹底拜服,到現在為止,我還是不明白為什麼另一種輸入方式就會WA,在此把WA和AC的都貼出來,大家自己感覺吧,也希望知道原因的高手可以留言解釋一下原因,不勝感激!
三.程式碼
1.WA
#include <stdio.h> #include <stdlib.h> int main() { int x1,y1,x2,y2,x,y; while((scanf("%d%d",&x1,&y1))&&x1&&y1) //注意此處的輸入方式與下文對比 { x2=x1;y2=y1; while((scanf("%d%d",&x,&y))&&x&&y) { if(x<x1) x1=x; if(y<y1) y1=y; if(x>x2) x2=x; if(y>y2) y2=y; } printf("%d %d %d %d\n",x1,y1,x2,y2); } return 0; }
2.AC
#include <stdio.h> #include <stdlib.h> int main() { int x1,x2,y1,y2,x,y; while(scanf("%d%d",&x1,&y1)) //同樣對比輸入方式,只是改變了迴圈跳出的方式,就AC了,終於找到了WA的原因,但是不明白.... { if(x1==0&&y1==0) break; x2=x1;y2=y1; while(scanf("%d%d",&x,&y)) { if(x==0&&y==0) break; if(x<x1) x1=x; if(y<y1) y1=y; if(x>x2) x2=x; if(y>y2) y2=y; } printf("%d %d %d %d\n",x1,y1,x2,y2); } return 0; }