|
发表于 2009-3-11 04:05:00
|
显示全部楼层
Re:看见有个帖子里说应聘策划有这个题目,大家看看
float a[4],b[4],c[4];
//只有一个球非标准
//第一步、A组B组C组各四个球,先称AB组,最坏的情况两组不等,假如B组比A组重,交换AB组的球。
if (sum(a)>sum(b))
{
//第二步,从A组拿出两个球加上B组拿出一个球,组成一组
// 从A组拿出一个球,从B组拿出一个球,从C组拿出一个球,组成一组
// 此时A组剩下一个球,B组剩下两个球
float a1=a[0]+a[1]+b[0];
float b1=a[2]+b[1]+c[0];
if(a1>b1)
{
//确定了a[0],a[1]可能是重球或者b[1]是轻球
//第三步,
float a2=a[0]+b[0];
float b2=a[1]+c[0];
if(a2>b2)
{
printf("heavy ball is a[0]\n");
exit();
}
if(a2<b2)
{
printf("heavy ball is a[1]\n");
exit();
}
printf("light ball is b[1]\n");
exit();
}
if(a1<b1)
{
//确定了b[0]是轻球或者a[2]是重球
//第三步,
if(b[0]<c[0])
{
printf("leight ball is b[0]\n");
exit();
}
else
{
printf("heavy ball is a[2]\n");
exit();
}
}
if(a1==b1)
{
//确定了a[3]是重球或者b[2]b[3]是轻球
//第三步,
float a3=a[3]+b[2];
float b3=c[0]+c[1];
if(a3>b3)
{
printf("heavy ball is a[3]\n");
exit();
}
if(a3==b3)
{
printf("leight ball is b[3]\n");
exit();
}
if(a3<b3)
{
printf("leight ball is b[2]\n");
exit();
}
}
}
//解决的关键是只有一个重球或者只有一个是轻球这两个互逆的条件,假如假设某个球是重球,那么其他球都是标准球,而不是其他球可能是标准球或者轻球 |
|