袋中N个号码不同的球,任意取出三球中任二球均不连号的机率?(downmoon)

本文通过三层循环算法计算了从1至10号球中取出三个球且任意两个球都不连续的概率,并提供了源代码及不同情况下的验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有人问起:袋中有1到10号的球各一个,任意取出三球,求三球中任二球均不连号的机率?邀月今天抽空试了一下。算法很一般。期待交流。
大概的算法是三层循环,先任意取出一个球,再从剩余球里再取出任意一个,再******。

/// <summary> /// 袋中N个号码不同的球,任意取出三球,求三球中任二球均不连号的机率 /// By tony 200909.17 /// <a title="邀月工作室" href="http://blog.youkuaiyun.com/downmoon/" mce_href="http://blog.youkuaiyun.com/downmoon/" >欢迎与邀月交流,net技术与软件架构</a>(邀月)3w@live.cn /// </summary> /// <param name="orgInt">一个整形数组列</param> public static void GetProbability(int[] orgInt) { int length = orgInt.Length; int all = 0;//所有的总数 int rel = 0;//相邻的总数 foreach (int fi in orgInt) { //从Length个号码数组中任意取出一球,号码为fi int[] secInt = new int[length - 1]; //得到剩余的九个号码数组 int[] temp1 = new int[orgInt.Length]; temp1 = (int[])orgInt.Clone(); int t1 = 0; foreach (int r1 in temp1) { if (fi != r1) { secInt[t1] = r1; t1++; } } int[] thInt = new int[secInt.Length - 1]; foreach (int si in secInt) { //从剩余的length-1个号码数组中任意取出一球,号码为si //得到剩余的八个号码数组 //Console.WriteLine(fi + "+" + si + "+" ); int[] temp2 = (int[])secInt.Clone(); int t2 = 0; foreach (int r2 in temp2) { if (si != r2 && r2 != fi) { thInt[t2] = r2; t2++; } } foreach (int ti in thInt) { //从剩余的length-2个号码数组中任意取出一球,号码为ti if ((!isRel(ti, si)) && (!isRel(fi, si)) && (!isRel(fi, ti))) { rel++; Console.WriteLine(fi + "+" + si + "+" + ti); } //此处可以外部计算获得,以节约资源 //all++; } } } all = length * (length - 1) * (length - 2); Console.WriteLine("三球中任二球不连号的可能性有:" + rel + "种!"); Console.WriteLine("三球取出的全部可能性有:" + all + "种!"); Console.WriteLine("三球中任二球均不连号的机率为:" + ((double)rel / all).ToString()); Console.ReadKey(); } /// <summary> /// 比较是否相邻 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static bool isRel(int a, int b) { if ((a + 1) == b) { return true; } if ((a - 1) == b) { return true; } return false; }

测试 :

public static void Main(string[] args) { int[] OrgInt = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; GetProbability(OrgInt); }

测试结果:

1+10+7 1+10+8 2+4+6 2+4+7 2+4+8 2+4+9 2+4+10 2+5+7 2+5+8 2+5+9 2+5+10 2+6+4 2+6+8 2+6+9 2+6+10 2+7+4 2+7+5 2+7+9 2+7+10 2+8+4 2+8+5 2+8+6 2+8+10 2+9+4 2+9+5 2+9+6 2+9+7 2+10+4 2+10+5 2+10+6 2+10+7 2+10+8 3+1+5 3+1+6 3+1+7 3+1+8 3+1+9 3+1+10 3+5+1 3+5+7 3+5+8 3+5+9 3+5+10 3+6+1 3+6+8 3+6+9 3+6+10 3+7+1 3+7+5 3+7+9 3+7+10 3+8+1 3+8+5 3+8+6 3+8+10 3+9+1 3+9+5 3+9+6 3+9+7 3+10+1 3+10+5 3+10+6 3+10+7 3+10+8 4+1+6 4+1+7 4+1+8 4+1+9 4+1+10 4+2+6 4+2+7 4+2+8 4+2+9 4+2+10 4+6+1 4+6+2 4+6+8 4+6+9 4+6+10 4+7+1 4+7+2 4+7+9 4+7+10 4+8+1 4+8+2 4+8+6 4+8+10 4+9+1 4+9+2 4+9+6 4+9+7 4+10+1 4+10+2 4+10+6 4+10+7 4+10+8 5+1+3 5+1+7 5+1+8 5+1+9 5+1+10 5+2+7 5+2+8 5+2+9 5+2+10 5+3+1 5+3+7 5+3+8 5+3+9 5+3+10 5+7+1 5+7+2 5+7+3 5+7+9 5+7+10 5+8+1 5+8+2 5+8+3 5+8+10 5+9+1 5+9+2 5+9+3 5+9+7 5+10+1 5+10+2 5+10+3 5+10+7 5+10+8 6+1+3 6+1+4 6+1+8 6+1+9 6+1+10 6+2+4 6+2+8 6+2+9 6+2+10 6+3+1 6+3+8 6+3+9 6+3+10 6+4+1 6+4+2 6+4+8 6+4+9 6+4+10 6+8+1 6+8+2 6+8+3 6+8+4 6+8+10 6+9+1 6+9+2 6+9+3 6+9+4 6+10+1 6+10+2 6+10+3 6+10+4 6+10+8 7+1+3 7+1+4 7+1+5 7+1+9 7+1+10 7+2+4 7+2+5 7+2+9 7+2+10 7+3+1 7+3+5 7+3+9 7+3+10 7+4+1 7+4+2 7+4+9 7+4+10 7+5+1 7+5+2 7+5+3 7+5+9 7+5+10 7+9+1 7+9+2 7+9+3 7+9+4 7+9+5 7+10+1 7+10+2 7+10+3 7+10+4 7+10+5 8+1+3 8+1+4 8+1+5 8+1+6 8+1+10 8+2+4 8+2+5 8+2+6 8+2+10 8+3+1 8+3+5 8+3+6 8+3+10 8+4+1 8+4+2 8+4+6 8+4+10 8+5+1 8+5+2 8+5+3 8+5+10 8+6+1 8+6+2 8+6+3 8+6+4 8+6+10 8+10+1 8+10+2 8+10+3 8+10+4 8+10+5 8+10+6 9+1+3 9+1+4 9+1+5 9+1+6 9+1+7 9+2+4 9+2+5 9+2+6 9+2+7 9+3+1 9+3+5 9+3+6 9+3+7 9+4+1 9+4+2 9+4+6 9+4+7 9+5+1 9+5+2 9+5+3 9+5+7 9+6+1 9+6+2 9+6+3 9+6+4 9+7+1 9+7+2 9+7+3 9+7+4 9+7+5 10+1+3 10+1+4 10+1+5 10+1+6 10+1+7 10+1+8 10+2+4 10+2+5 10+2+6 10+2+7 10+2+8 10+3+1 10+3+5 10+3+6 10+3+7 10+3+8 10+4+1 10+4+2 10+4+6 10+4+7 10+4+8 10+5+1 10+5+2 10+5+3 10+5+7 10+5+8 10+6+1 10+6+2 10+6+3 10+6+4 10+6+8 10+7+1 10+7+2 10+7+3 10+7+4 10+7+5 10+8+1 10+8+2 10+8+3 10+8+4 10+8+5 10+8+6

三球中任二球不连号的可能性有:336种!
三球取出的全部可能性有:720种!
三球中任二球均不连号的机率为:0.466666666666667

欢迎指正。

看了下大家的回复,似乎我分析的不够清楚。文章开头说的是1-10号球是连号的。而我的算法中是不区分号码的具体的数字,
也就是说,我的算法是通用的,跟具体的数字没有关系。

可以测试:


public static void Main(string[] args) { int[] OrgInt = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 }; GetProbability(OrgInt); }

把原数字10改为11,则答案变成

三球中任二球不连号的可能性有:378 种!
三球取出的全部可能性有:720种!
三球中任二球均不连号的机率为:0.525


public static void Main(string[] args) { int[] OrgInt = { 1, 2, 3, 4, 5, 6, 7, 8, 13, 11 }; GetProbability(OrgInt); }

把原数字10改为11,把原数字9改为13,则答案变成

三球中任二球不连号的可能性有:420 种!
三球取出的全部可能性有:720种!
三球中任二球均不连号的机率为:0.525


助人等于自助! 3w@live.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值