如何选择到最好女孩

假设你是一位男孩,而上天在你20-30岁间安排了20位适合你的女孩。这些女孩都愿意作为你的伴侣,但你只能选择他们其中一个。选择的条件如下:

  1. 对于你来说,这20位女孩是可以排序的,也就是说事后你可以对她们的质量进行排名,排名第一的女孩对你来说就是最好的,排名第二十的对你来说就是最差的。
  2. 这20位女孩不是同时出现在你的生命中,而是按照时间顺序先后出现,每出现一个你都要决定留下还是拒绝。如果留下她,她就会成为你的终身伴侣,你将没有权利选择后面的女孩;如果你拒绝,你还可以选择后面的女孩,但是对前面已经拒绝的女孩就没有机会从头再来。

假设上天是完全随机安排各个时间段出现的女孩,即出现的时间先后和女孩的质量完全没有关系。那么,你应该在什么时候决定接受一位女孩,并使得被接受的那位女孩属于最好女孩的可能性最大呢?

策略1:事先抽签,抽到第几个就第几个。比如,抽到第10位,那么第10个在你生命中出现的女孩就事前被确定为你的伴侣。而她刚好是最好的女孩之概率是多少呢?答案是1/20=0.05。这种策略使你有5%的可能性获得最好的女孩。这样的概率显然太小

我们有没有比较好的策略以更大的概率找到最好的女孩呢

策略2:取某个中间点n,如果在这个中间点之前无论女孩怎么样都不会考虑,到第n个时就会正式考虑了,如果当前女孩比以前的都好,那么就选为终生伴侣,否则放弃,从下一个继续选。这也比较符合我们日常的做法。那么这个中间点n该怎么确定才能是概率最大,我们接下来分析一下

假设第K个女孩是最好的,概率为1/20,当我们从n开始正式考虑时要想找到最好的女孩,需要k>n,也就是说最好的女孩在第n个之后。这样还不能保证一定能找到最好的女孩,因为我们的策略是从n开始,如果当前的比以前所有的都好,就会选择。所以要想在n之后k之前的都不选,那么需要在k之前最好的女孩出现在n之前,这样就不会选择从n到k-1之间的任何女孩。这样的话第k个女孩是最好的女孩并且k之前最好的女孩出现在n之前的概率为 1/20*(n-1)/(k-1) ,其中k的取值为[n,20],所以从n开始正式考虑能找到最好女孩的概率为: 

用C++编程求出n从1到20的概率

#define GIRLNUM 20		//女生个数
void theory(){
	for (int n=1;n<GIRLNUM+1;n++)
	{
		float pro=0;
		for (int k=n;k<GIRLNUM+1;k++)
		{
			pro+=(float)(n-1)/(k-1);
		}
		pro=pro/20;
		cout<<n<<" => "<<pro*100<<"%"<<endl;
	}
}
运行结果如下:


从结果中可以看出,从第八个开始考虑时概率最大,为38.42%

接下来我从统计的角度验证一下上述结果,c++源代码如下:

#include "stdafx.h"
#include <iostream>
#include <CTIME>
using namespace std;
#define GIRLNUM 20		//女生个数
#define TESTNUM 1000000         //样本个数
//随机生成GIRLNUM个女孩的排列
void generate(int * girl)
{
	for (int i=0;i<GIRLNUM;i++)
	{
		girl[i]=i;
	}
	//与当前元素之后的某个元素交换
	for (int j=0;j<GIRLNUM;j++)
	{
		int index=rand()%(GIRLNUM-j)+j;
		int temp=girl[j];
		girl[j]=girl[index];
		girl[index]=temp;
	}
}
void statistics(){
	float probability[GIRLNUM];
	memset(probability,0,GIRLNUM*sizeof(int));
	srand(time(NULL));
	for (int test=0;test<TESTNUM;test++)
	{
		int girl[GIRLNUM];
		//随机生成女生序列
		generate(girl);	
		for (int cur=0;cur<GIRLNUM;cur++)
		{
			int bestGirl=girl[0];
			int selectGirl=girl[0];
			for (int here=1;here<GIRLNUM;here++)
			{
				//从cur开始正式考虑
				if (here>=cur)
				{
					selectGirl=girl[here];
					if(girl[here]>bestGirl)
					{				
						break;
					}
				}
				if (bestGirl<girl[here])
				{
					bestGirl=girl[here];
				}
			}
			//如果选择是最好的,则记录下来
			if (selectGirl==GIRLNUM-1)
			{
				probability[cur]++;
			}
		}
	}
	for (int m=0;m<GIRLNUM;m++)
	{
		probability[m]=(float)probability[m]/TESTNUM;
		cout<<"从第 "<<m+1<<" 个开始考虑的概率为: "<<probability[m]*100<<"%"<<endl;
	}
}
实验中样本个数为100万,结果如下:


结果显示,从第八个开始考虑,概率最大,
为38.42%,和上面理论论述的结果是一样的

PS:由于随机函数并不是真正的随机,得到的结果和理论结果稍有误差



### 回答1: 要想追到自己喜欢的女孩,首先要勇于表达自己的感情,让对方感受到你的真诚,建立起信任和互相理解的基础;其次要有耐心,细心地去了解对方,适当地示爱,让对方感受到你的爱慕;最后要有一颗坚持不懈的心,步步紧追,不断地去拓展你们之间的感情,直到追到自己喜欢的女孩。 ### 回答2: 要追到自己喜欢的女孩,首先要建立起良好的沟通和友谊。以下是一些方法: 1. 了解她:向她了解更多,包括兴趣爱好、家庭背景、梦想等。这样你可以找到共同的话题,展示你的关心和共鸣。 2. 诚实坦率:在与她的交流中展示出真实的自己,不要伪装或夸大自己。分享自己的愿望、目标和想法,表达对她的真诚喜欢。 3. 细心体贴:留意她的需求和喜好,为她提供帮助和支持。例如,送她一本她喜欢的书,关心她的感受并提供鼓励。 4. 建立共同兴趣:参加一些她喜欢的活动,共同分享快乐和兴奋。这样可以加深你们之间的联系和默契。 5. 直接表达:一旦你觉得时机合适,不妨直接告诉她你对她的感受。用真挚的语言表达出你的喜欢,并尊重她的决定和感受。 6. 细心观察:留意她对你的反应和态度。如果她对你的接近积极回应,不妨继续深入交往。如果她并不对你有特别的兴趣,要尊重她的选择,并以友好的方式维持关系。 最重要的是,尊重女孩的意愿和感受,并保持耐心和坚持。爱情需要时间来培养,不要急于求成,慢慢建立起真诚的感情连接。 ### 回答3: 追求自己喜欢的女孩并不是一件容易的事情,需要谨慎而细致的计划和行动。以下是一些建议: 首先,多加了解和接近她。通过朋友圈、社交媒体等方式了解她的兴趣、爱好和价值观。在日常生活中积极参与她喜欢的活动,找到共同话题和兴趣。 其次,建立良好的沟通和信任。与她保持积极开放的交流,展示出真诚和善意。对她的观点和意见表示尊重和重视,同时也分享自己的想法和感受。通过简单的问候、关心和鼓励,使她感受到你对她的关注和真心。 另外,展示自己的优点和成熟。积极培养自己的个人魅力,提升自信心。在学业、事业和兴趣爱好等方面追求卓越,展现自己的独立、负责和有趣的一面。 同时,不要太过于急切和依赖。尊重她的意愿和选择,给予她空间和时间。避免一味地付出和追求,而是通过适度地表达关心和喜欢,建立起一种平等和健康的关系。 最后,诚实地表达自己的感受。在你觉得时机成熟时,坦诚地告诉她你的心意。尊重她的决定,并接受她的回应。 总之,追求自己喜欢的女孩需要时间、耐心和真诚。记住,与她建立起深厚的友谊和信任是一切成功的基础。无论最终结果如何,珍惜这段过程中的成长和回忆,并相信最适合你的人终将出现。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值