2个人去旅游,一人买了一个一模一样的古董,由于回来上飞机时被弄碎了,他们要求航空公司索赔,经理答应他们赔偿,但不知道古董的价格,如果问他们俩,担心他们会狮子大开口,于是想了一个办法,把2人叫开,分别问古董价格(2-100),如果2人回答一致,就按这价格赔偿,如果不一致,则按照低的那方为标准赔偿,并给报价低的2元奖励,报价高的减2元,比如A报48元,B报100,则以48为标准,同时A奖励2元,得50,B减2元,得46~请问如果你是其中一人,你怎样报价感觉合?适?并说明理由、
调试欢乐多
不知道怎么解答。
我在Excel里画了一下。
2 3 4 5 6 7 8 9 10
2 2 4 4 4 4 4 4 4 4
3 0 3 5 5 5 5 5 5 5
4 0 1 4 6 6 6 6 6 6
5 0 1 2 5 7 7 7 7 7
6 0 1 2 3 6 8 8 8 8
7 0 1 2 3 4 7 10 9 9
8 0 1 2 3 4 5 8 10 10
9 0 1 2 3 4 5 6 9 11
10 0 1 2 3 4 5 6 7 10两个人都应该回答,价值2元。
这样至少每个人可以得到2元。
public class TestInteger
{
public static void main(String[] args)
{
for (int a = 2; a < 101; a++)
{
for (int b = a; b <= a; b++)
{
getPrice(a, b);
}
}
}
private static void getPrice(int a, int b)
{
int bSum = 0;
int aSum = 0;
System.out.println("a :" + a + "***" + "b :" + b);
if (b < a)
{
bSum = b + 2;
aSum = a - 2;
}
else
{
bSum = b;
aSum = a;
}
for (int price = 2; price < 101; price++)
{
System.out.println("a可以多拿" + (aSum - price) + "元。" + "********"
+ "b可以多拿" + (bSum - price) + "元。");
}
}
}
运行结果
只有当2个人都说100的时候不会出现负值
大家看下逻辑是否正确- -
这个程序问题太大了
for (int a = 2; a < 101; a++)
{
for (int b = a; b <= a; b++)
{
getPrice(a, b); //这里的a和b永远是相等的时候进入方法getPrice,也就是说两个人永远都说同一个价,这样当然是都说100最大了
}
}
从题目上来看,似乎有这样的假定。甲和乙都不知道对方的报价。而且甲和乙都明白航空公司的赔偿规则。
否则没法继续讨论下去了。我在12楼画的图有点错位,把这个图拓展到98*98个格子。横纵格子都是2到100。当乙选择某个策略时,甲的最优解所在的策略是变动的。
从数字上看,甲不存在某个策略,这个策略比其他所有的策略都强。假设乙随机选择策略。
那甲选择报价x,则甲拿到的钱的期望是 ((100-x)*(x+2)+x+(x-2)(x-3)/2)/100,
其中,(100-x)*(x+2)代表甲的报价低于乙的数目乘以甲的收益,+x代表报价相等的部分,+(x-2)(x-3)/2代表甲的报价高于乙的部分,也就是0..,0,0,1,2,3直到x-3的求和。整理得到(-x^2+193x+406)/200
配方,得到(-(x-193/2)^2+...)/200
档x-193/2最小时,这个值最大。
所以x=96或者x=97时。我这么计算对吗?我也更加迷茫了。