藍橋杯 演算法 啤酒和飲料
阿新 • • 發佈:2019-02-18
啤酒每罐2.3元,飲料每罐1.9元。小明買了若干啤酒和飲料,一共花了82.3元。
我們還知道他買的啤酒比飲料的數量少,請你計算他買了幾罐啤酒。
博主的辦法是用兩個for迴圈,我想到的是用一個for迴圈,思路是用for迴圈不斷增加啤酒的數量,並通過(int)82.3-2.3*i/1.9(i為啤酒的數量)計算飲料的最大數量,在for迴圈裡新增一個判斷語句,判斷對應數量的飲料和啤酒是否是82.3元,若是,則結果正確,對應的程式碼為:
但是忽略了一個缺陷:float不能用==判斷,後經博主提醒,更改後的程式碼:#include <iostream> int main(int argc, char** argv) { float money; int jiu, yin, i, k; for(i=0;i<20;i++) //當i大於20時,啤酒數大於飲料數,條件不符合; { if(82.3 == ((int)((82.3-2.3*i)/1.9))*1.9+2.3*i) // 先計算買了i罐啤酒後還能買多少罐飲料,結果會是浮點數 //取整後再計算對應數量的飲料和i罐啤酒的總額是否是82.3,若是,則結果正確,結束 { printf("%d",i); break; } } return 0; }
在此再次感謝博主的分享和提醒,謝謝!#include <iostream> #include<stdio.h> #include<math.h> #define eps 1e-8 using namespace std; int main(int argc, char** argv) { float money; int jiu, yin, i, k; for(i=0;i<35;i++) { if(fabs(82.3-(((int)((82.3-2.3*i)/1.9))*1.9+2.3*i))<eps) // 先計算買了i罐啤酒後還能買多少罐飲料,結果會是浮點數 //取整後再對應數量的飲料和i罐啤酒的總額是否是82.3,若是,則結果正確,結束 { printf("%d",i); break; } } return 0; }