【发布时间】:2017-06-23 08:40:11
【问题描述】:
我在网站上看到了这个问题(我不会使用确切的措辞或提及网站),
假设一个孩子在每个月的 15 号拿到零用钱, 根据那天是哪一天,假设他得到 1 个硬币 周一,周二2个硬币...周日7个硬币。什么是预期 他在随机月份的 15 号会得到多少硬币?
起初我虽然每个的概率都是 1/7 所以答案应该是 4,但它说错了答案。
然后想了更多关于如何选择一个随机月份的问题,并记得日历每 400 年会重复一次,所以认为可能与此有关,所以我编写了以下代码:
int Date(int mn,int yr)
{
if( ( yr%400==0 || (yr%100!=0 && yr%4==0) ) && mn==2)
return 29;
if(mn==2)
return 28;
if(mn==4 || mn==6 || mn==9 || mn==11)
return 30;
return 31;
}
int main()
{
double coins=0;
int wk=0;
for(int yr=1;yr<=400;yr++)
{
for(int mn=1;mn<=12;mn++)
{
for(int dt=1;dt<=Date(mn,yr);dt++)
{
if(dt==15)
coins += wk%7 +1;
wk++;
}
}
}
cout<<setprecision(10)<<coins/12/400;
}
输出 -
4.001666667
还有宾果游戏!正确答案! 但是再想一想,我意识到我选择星期一作为开始日,但不能是任何一天吗? 所以我在程序上做了这个小改动——
int main()
{
double total=0;
for(int i=0;i<7;i++)
{
int wk=i;
double coins=0;
for(int yr=1;yr<=400;yr++)
{
for(int mn=1;mn<=12;mn++)
{
for(int dt=1;dt<=Date(mn,yr);dt++)
{
if(dt==15)
coins += wk%7 +1;
wk++;
}
}
}
cout<<setprecision(10)<<coins/12/400<<endl;
total += coins;
}
cout<<endl<<setprecision(10)<<total/7/12/400;
}
输出-
4.001666667
3.998333333
4.000833333
3.998958333
4
4.001041667
3.999166667
4
Soooo...现在我真的很困惑...我们应该接受 4.00666,因为它是 0001 年 1 月 1 日星期一,或者问题可能有任何答案,或者我在这里遗漏了一些非常重要的东西?
这个问题的正确答案应该是什么?
如果不存在“正确”答案,那么您认为最合适的答案应该是什么?
【问题讨论】:
-
随机月份是什么?今年?给定间隔内的任何年份(统一概率),还是永恒?也许你没有引用相关的部分,也许整个练习没有明确说明并且无法解决。
-
@ArneVogel 这个问题只是说“随机月份”,它没有描述随机月份是从哪里选择的,我想它只能被视为永恒。
标签: c++ algorithm math probability