游泳池 (Standard IO)
生活随笔
收集整理的這篇文章主要介紹了
游泳池 (Standard IO)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意/Description:
? ? ? ?有一個游泳池,形狀為等腰直角三角形,直角邊長250米。
? ? ? ?游泳池可以看作是在坐標系統中(如上圖所示)。用一條兩端點在三角形邊上的線段把游泳池分成兩個面積相同的部分。
在給定線段其中一個端點的情況下,要你編程輸出另一個端點。
讀入/Input:
? ? ? ?輸入第一行包含兩個整數,表示線段一個端點的坐標,保證給定的端點在直角三角形的邊上。
輸出/Output:
? ? ? ?輸出線段另一個端點的坐標,答案保留2位小數。
題解/solution:
? ? ? 自己畫6個圖,分點在每條邊的左邊和右邊6種情況。然后,求出被分成兩半的面積,不停比較,暴力,即可。正解見http://blog.csdn.net/liangzihao1/article/details/51917457。
? ? ? ?我的代碼長,不易懂。樣例過不了,千萬別復制。但AC了。
代碼/Code:
varx,y:longint;a,max,k:real; procedure fd; beginif (x=0) and (y=0) thenbeginwrite('125.00 125.00'); halt;end;if (x=250) and (y=0) thenbeginwrite('0.00 125.00'); halt;end;if (x=0) and (y=250) thenbeginwrite('125.00 0.00'); halt;end;if (x=125) and (y=125) thenbeginwrite('0.00 0.00'); halt;end;if (x=0) and (y=125) thenbeginwrite('250.00 0.00'); halt;end;if (x=125) and (y=0) thenbeginwrite('0.00 250.00'); halt;end; end;procedure main1; varsum,t,k:real;i:longint; begint:=(250*y)/2;for i:=1 to 125 dobeginsum:=t+(i*x)/2;if max-sum<sum thenbegink:=i-1;break;end;end;for i:=1 to 100 dobeginsum:=t+(k*x)/2;if max-sum>=sum then k:=k+0.01else break;end;write('0.00 ',k:0:2); end;procedure main2; varsum,t,k:real;i:longint; begint:=(250*x)/2;for i:=1 to 125 dobeginsum:=t+(i*y)/2;if max-sum<sum thenbegink:=i-1;break;end;end;for i:=1 to 100 dobeginsum:=t+(k*y)/2;if max-sum>=sum then k:=k+0.01else break;end;write(k-0.01:0:2,' 0.00'); end;procedure main3; varsum,k:real;i:longint; beginfor i:=125 to 250 dobeginsum:=(x*i)/2;if max-sum<sum thenbegink:=i-1;break;end;end;for i:=1 to 100 dobeginsum:=(x*k)/2;if max-sum>=sum then k:=k+0.01else break;end;write('0.00 ',k-0.01:0:2); end;procedure main4; varsum,k:real;i:longint; beginfor i:=125 to 250 dobeginsum:=((250-x)*i)/2;if max-sum<sum thenbegink:=i-1;break;end;end;for i:=1 to 100 dobeginsum:=((250-x)*k)/2;if max-sum>=sum then k:=k+0.01else break;end;if max-sum<sum then k:=k-0.01;write(250-k:0:2,' ',k:0:2); end;procedure main5; varsum,k:real;i:longint; beginfor i:=125 to 250 dobeginsum:=(y*i)/2;if max-sum<sum thenbegink:=i-1;break;end;end;for i:=1 to 100 dobeginsum:=(y*k)/2;if max-sum>=sum then k:=k+0.01else break;end;write(k-0.01:0:2,' 0.00'); end;procedure main6; varsum,k:real;i:longint; beginfor i:=125 to 250 dobeginsum:=((250-y)*i)/2;if max-sum<sum thenbegink:=i-1;break;end;end;for i:=1 to 100 dobeginsum:=((250-y)*k)/2;if max-sum>=sum then k:=k+0.01else break;end;write(k:0:2,' ',250-k:0:2); end;beginreadln(x,y);fd;max:=(250*250)/2;k:=maxlongint;if (x>125) and (y<125) and (y<>0) then main1;if (x<125) and (y>125) and (x<>0) then main2;if (x>125) and (y=0) then main3;if (x<125) and (y=0) then main4;if (x=0) and (y>125) then main5;if (x=0) and (y<125) then main6; end.
總結
以上是生活随笔為你收集整理的游泳池 (Standard IO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android神笔之Paint
- 下一篇: 如何打造自己的PoC框架-Pocsuit