利用sql語句解決簡單的數學題

dbhelper發表於2014-11-26
今天在解決一個問題的時候,發現自己的數學水平嚴重下降,現在是光有思路沒有答案,自己簡單算了幾個答案,還是不太滿意。
最後嘗試寫了一個簡單的pl/sql就解決了。
問題是這樣的,一個系統的處理結果會提供兩個引數,用這個引數來衡量系統的情況,一個我們設為pass_ratio,另一個設為fail_ratio. 我們假設需要投入時間分別設為x,y
就是返回pass_ratio需要的時間為x,返回fail_ratio的時間為y
需要從x,y中得到一個最優組合。
如果返回的結果為pass_ratio的值,會有一個公式 pass_ratio*x-x-y>0
如果返回的結果為fail_ratio的值,會有一個公式$fail_ratio*y-y-x>0
我寫了下面的pl/sql來簡單實現,還是用窮舉法來做,在這個方面,電腦還是比人腦強大的多啊。
pass_ratio=$1
fail_ratio=$2
sqlplus -s  n1/n1 < set serveroutput on
set feedback off
begin
for x in 5..50 loop
  for y in 5..50 loop
  if($pass_ratio*x-x-y>0 and $fail_ratio*y-y-x>-2) then
dbms_output.put_line($pass_ratio||' '||$fail_ratio||' '||x||' '||y||' pass:'||to_number($pass_ratio*x-x-y)*0.88||'-- fail:'||to_number($fail_ratio*y-y-x)*0.88);
end if;
 end loop;
end loop;
end;
/
EOF


輸出的結果如下:
 > ksh a.sh 1.5 3.1
1.5 3.1 23 11 pass:.44-- fail:.088
1.5 3.1 25 12 pass:.44-- fail:.176
1.5 3.1 27 13 pass:.44-- fail:.264
1.5 3.1 29 14 pass:.44-- fail:.352
1.5 3.1 31 15 pass:.44-- fail:.44
1.5 3.1 33 16 pass:.44-- fail:.528
1.5 3.1 35 17 pass:.44-- fail:.616
1.5 3.1 37 18 pass:.44-- fail:.704
1.5 3.1 39 19 pass:.44-- fail:.792
1.5 3.1 41 20 pass:.44-- fail:.88
1.5 3.1 43 21 pass:.44-- fail:.968
1.5 3.1 44 21 pass:.88-- fail:.088
1.5 3.1 45 22 pass:.44-- fail:1.056
1.5 3.1 46 22 pass:.88-- fail:.176
1.5 3.1 47 23 pass:.44-- fail:1.144
1.5 3.1 48 23 pass:.88-- fail:.264
1.5 3.1 49 24 pass:.44-- fail:1.232
1.5 3.1 50 24 pass:.88-- fail:.352

看輸出的結果自己的大腦是算不出來的。還是寫個程式來的方便。:)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347001/,如需轉載,請註明出處,否則將追究法律責任。

相關文章