子曰:「三人行,必有我師焉。擇其善者而從之,其不善者而改之。」
本題給定甲、乙、丙三個人的能力值關係為:甲的能力值確定是 2 位正整數;把甲的能力值的 2 個數字調換位置就是乙的能力值;甲乙兩人能力差是丙的能力值的 x 倍;乙的能力值是丙的 y 倍。請你指出誰比你強應「從之」,誰比你弱應「改之」。
輸入在一行中給出三個數,依次為:m(你自己的能力值)、x 和 y。三個數字均為不超過 1000 的正整數。
在一行中首先輸出甲的能力值,隨後依次輸出甲、乙、丙三人與你的關係:如果其比你強,輸出cong
;平等則輸出ping
;比你弱則輸出gai
。其間以 1 個空格分隔,行首尾不得有多餘空格。
注意:如果解不唯一,則以甲的最大解為準進行判斷;如果解不存在,則輸出no solution
。
48 3 7
48 ping cong gai
48 11 6
二、思路分析no solution
(直接搬別人的啦,懶得打了)
從題目中,知存在公式:
1、丙 * y = 乙
2、丙 * x = | 甲 - 乙 |
應題目要求,令甲=99至10,判斷是否存在乙、丙符合要求。
三、錯誤分析
1、測試點4答案錯誤:
存在丙不為整數,符合要求。
2、修改過程中:
bing =yi / y錯誤,因為丙會得到乙個整數,而不是小數
應修改為
bing = (double) yi / (double) y;
兩個int整數相除,若要正確賦值給乙個double/float浮點型,必須在運算時使其中乙個(或全部)int整數強制轉換為double/float浮點型。
如**if條件中的
abs(yi - jia) == bing * x)
bing為double浮點型,而 abs(yi - jia) 是整形
那麼 abs(yi - jia) / x == bing 則可能得不到正確結果
應轉化為:
(double)abs(yi - jia) / (double)x
或轉化為乘法:
abs(yi - jia) == bing * x(本題乘法兩端都應該得到整數結果,因此不會出錯)
**如下(寫的真爛。。還專門寫了個函式,最後把丙的相關式子都改成double了,還是18分,最後的最後才發現自定義函式沒改)
1 #include2using
namespace
std;
3void cmp(double a,doubleb)8
intmain() 23}
24 cout<<"
no solution";
25return0;
26 }
1088 三人行 (20 分)
子曰 三人行,必有我師焉。擇其善者而從之,其不善者而改之。本題給定甲 乙 丙三個人的能力值關係為 甲的能力值確定是 2 位正整數 把甲的能力值的 2 個數字調換位置就是乙的能力值 甲乙兩人能力差是丙的能力值的 x 倍 乙的能力值是丙的 y 倍。請你指出誰比你強應 從之 誰比你弱應 改之 includ...
1088 三人行 (20 分)
單位 浙江大學 時間限制 400 ms 記憶體限制 64 mb 長度限制 16 kb 子曰 三人行,必有我師焉。擇其善者而從之,其不善者而改之。本題給定甲 乙 丙三個人的能力值關係為 甲的能力值確定是 2 位正整數 把甲的能力值的 2 個數字調換位置就是乙的能力值 甲乙兩人能力差是丙的能力值的 x ...
1088 三人行 (20 分)
子曰 三人行,必有我師焉。擇其善者而從之,其不善者而改之。本題給定甲 乙 丙三個人的能力值關係為 甲的能力值確定是 2 位正整數 把甲的能力值的 2 個數字調換位置就是乙的能力值 甲乙兩人能力差是丙的能力值的 x 倍 乙的能力值是丙的 y 倍。請你指出誰比你強應 從之 誰比你弱應 改之 輸入格式 輸...