2015 HUAS Provincial Select Contest #3 D

题目:

Description

有三户人家共拥有一座花园,每户人家的太太均需帮忙整理花园。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 太太应得的金额(单位:元)。

解题思路:每个人都有一个庄园,把三个庄园看成一个整体,A太太打扫C太太的庄园的面积是5/9-1/3,B太太同理是4/9-1/3,A太太应该得到的钱是90*((5/9-1/3)/((5/9-1/3)+(4/9-1/3)))=60元。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     int T;
 7     cin>>T;
 8     if(T<=20)
 9     {
10         int x,y,z,sum,t;
11         double a,b,c,p;
12         while(T--)
13         {
14             cin>>x>>y>>z;
15             if(x>=1&&x<=10&&y>=1&&y<=10&&z>=1&&z<=1000&&double(x)/(x+y)>=(1.0/3))
16             {
17                 sum=x+y;
18                 a=double(x)/sum-(1.0/3);
19                 b=double(y)/sum-(1.0/3);
20                 a=a/(a+b);
21                 p=a*z;
22                 t=int(p);
23                 p=p-int(p);
24                 if(p>0.5)
25                     t+=1;
26                 printf("%d\n",t);
27             }
28         }
29     }
30     return 0;
31 }

 


	return 0;
}
posted on 2015-07-16 20:24  最爱剪刀手  阅读(228)  评论(0编辑  收藏  举报