整理花园问题
题目大意:
有三户人家共拥有一座花园,每户人家的太太均需帮忙整理花园。A 太太工作了5 天,B 太太则工作了4 天,才将花园整理完毕。C 太太因为正身怀六甲无法加入她们的行列,便出了90元。请问这笔钱如何分给A、B 二位太太较为恰当?A 应得多少元?90/(5+4)*5=$50 元?如果这么想你就上当了!正确答案是60 元。如果没想通的话再想想吧。
下面回答一个一般性的问题:假定A 太太工作了x 天,B 太太工作了y 天,C 太太出了90元,则A 太太应得多少元?输入保证二位太太均应得到非负整数元钱。三个太太工作效率相同。
友情提示:本题有个小小的陷阱哦。如果答案错的话,认真检查一下代码吧。
要求:
Input
输入第一行为数据组数T (T<=20)。每组数据仅一行,包含三个整数x, y, z (1<=x, y<=10,1<=z<=1000)。
Output
对于每组数据,输出一个整数,即A 太太应得的金额(单位:元)。样例输入:
Sample Input
2 5 4 90 8 4 123
Sample Output
60 123 注意提示:如果使用浮点数,请小心误差,输出时尽量用四舍五入。 题目分析:这是一道典型的数学问题。做题前首先要做出计算公式,找到公式后写程序就简单了。要想得到A太太所得的钱数,因为要考虑到浮点数为问题,根据计算得到公式三人都做每人应做的天数s=(x+y)/3.0;A多做的天数a=x-s;B多做的天数b=y-s;C应该付给A的钱数pay=a/(a+b)*z。程序代码:
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 5 int T[20]; 6 int y[10]; 7 int z[1000]; 8 9 int main () 10 { 11 int T; 12 scanf("%d",&T); 13 while(T--) 14 { 15 int x,y,z; 16 double a,b,s,pay; 17 18 19 scanf("%d%d%d",&x,&y,&z); 20 21 s=(x+y)/3.0; //三人都做每人应做的天数 22 a=x-s; //A多做的天数 23 b=y-s; //B多做的天数 24 pay=a/(a+b)*z; //C应付给A的钱数 25 int k=pay+0.5; //将钱数四舍五入得到整数 26 cout<<k<<endl; 27 } 28 return 0; 29 30 }
心得:
这道题看起来很简单,但就是在计算A应该得到多少钱时,总也找不到关系式,所以计算了很久。找到关系式后,程序很快就写完啦。算是一道很简单的题目。
觉得自己在思考方面还存在一些问题,下次应该更多做一些数学题,锻炼一下自己的思维能力。
时间: 2024-10-29 19:10:49