模拟程序的结果证明:恋爱不能认死理
2011-08-13 12:04
225 查看
刚刚看了科学松鼠会的一篇文章《死理性派恋爱法:拒绝掉前面37%的人》,我照着文章的结论,写了一段C++代码做模拟。程序运行的结果证明:如果拒绝掉前37%的人,会经常出现"Sigh"的悲剧。所以说松鼠会的这篇文章有一定的误导性,不过文章的确也提到了这种风险:
不过,37% 法则有一个小问题:如果最佳人选本来就在这 37% 的人里面,错过这 37% 的人之后,她就再也碰不上更好的了。但在游戏过程中,她并不知道最佳人选已经被拒,因此她会一直痴痴地等待。也就是说,MM 将会有 37% 的概率“失败退场”,或者以被迫选择最后一名求爱者的结局而告终。。。
从现实的角度来看,这个问题可不算小:)。 模拟代码很简单,如下:
/********************************************************************************** * file: pursueLover.cpp * brief: Simulation code for the paper: http://songshuhui.net/archives/57722. * author: thinkhy * date: 2011-08-13 **********************************************************************************/#include <cstdio> #include <cstdlib> using namespace std; int main() { srand((unsigned) time(NULL)); int man[30]; for (int i = 0; i < 30; i++) { man[i] = rand() % 30; } int max = -1; int magic = int(30 * 0.37); for (int i = 0; i <= magic; i++) { if (man[i] > max) { max = man[i]; } } bool bGot = false; for (int i = magic + 1; i < 30; i++) { if (man[i] > max) { bGot = true; max = man[i]; break; } } if (bGot) { printf("She got the best man!! id: %d\n", max); } else { printf("Sigh!\n"); } return 0; }
不过,37% 法则有一个小问题:如果最佳人选本来就在这 37% 的人里面,错过这 37% 的人之后,她就再也碰不上更好的了。但在游戏过程中,她并不知道最佳人选已经被拒,因此她会一直痴痴地等待。也就是说,MM 将会有 37% 的概率“失败退场”,或者以被迫选择最后一名求爱者的结局而告终。。。
从现实的角度来看,这个问题可不算小:)。 模拟代码很简单,如下:
/********************************************************************************** * file: pursueLover.cpp * brief: Simulation code for the paper: http://songshuhui.net/archives/57722. * author: thinkhy * date: 2011-08-13 **********************************************************************************/#include <cstdio> #include <cstdlib> using namespace std; int main() { srand((unsigned) time(NULL)); int man[30]; for (int i = 0; i < 30; i++) { man[i] = rand() % 30; } int max = -1; int magic = int(30 * 0.37); for (int i = 0; i <= magic; i++) { if (man[i] > max) { max = man[i]; } } bool bGot = false; for (int i = magic + 1; i < 30; i++) { if (man[i] > max) { bGot = true; max = man[i]; break; } } if (bGot) { printf("She got the best man!! id: %d\n", max); } else { printf("Sigh!\n"); } return 0; }
相关文章推荐
- 解决:eclipse cdt 编写的c/c++程序的运行结果不能输出到console
- 请各位帮忙看一下,第一个程序为什么不能输出和第二个程序一样的结果?这两个程序只有求最大公约束的代码不同
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- 用java编写在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34–5 + 67–8 + 9 = 100。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序
- 新手写openmp程序,结果不能运行,求教高手指点
- Servlet笔记2--模拟Servlet本质、第一个Servlet程序、将响应结果输出到浏览器中
- 文章标题编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- PrintWriter证明了txt和doc的差距,txt不能识别控制符write方法在txt文件中运用时结果不能识别\n
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- 编写一个程序,模拟扔硬币的结果.
- 写一个程序,语言不限,打印出100的阶乘(即1*2*3*…*100)的精确数值结果(不能是浮点数)。如5的阶乘是1*2*3*4*5=120
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序
- 做了个模拟不断访问网站的小程序,可是访问完后不能关闭IE的进程,求帮助
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性。 例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100