1088 三人行 (20 分)

2022-05-17 17:39:07 字數 1489 閱讀 3165

子曰:「三人行,必有我師焉。擇其善者而從之,其不善者而改之。」

本題給定甲、乙、丙三個人的能力值關係為:甲的能力值確定是 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 #include2

using

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 倍。請你指出誰比你強應 從之 誰比你弱應 改之 輸入格式 輸...