同時丟5個色子同時出現2對一樣概率


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            T2();
            Console.ReadLine();
        }

        private static void T1()
        {
            var list = new List<List<int>>();
            var count = 0;
            StringBuilder sb = new StringBuilder();
            for (int f1 = 1; f1 <= 6; f1++)
            {
                for (int f2 = 1; f2 <= 6; f2++)
                {

                    for (int f3 = 1; f3 <= 6; f3++)
                    {

                        for (int f4 = 1; f4 <= 6; f4++)
                        {

                            for (int f5 = 1; f5 <= 6; f5++)
                            {
                                var dic = new int[] { 0, 0, 0, 0, 0, 0, 0 };
                                dic[f1]++; dic[f2]++; dic[f3]++;
                                dic[f4]++; dic[f5]++;

                                var pcount = 0;
                                var tcount = 0;
                                foreach (int it in dic)
                                {
                                    if (it == 2)
                                    {
                                        pcount++;
                                    }
                                    if (it > 2)
                                    {
                                        tcount++;
                                    }
                                }
                                if (pcount == 2)
                                {

                                    var str = string.Format("{0}-{1}-{2}-{3}-{4}", f1, f2, f3, f4, f5);
                                    Console.WriteLine(str);
                                    sb.AppendLine(str);
                                    count++;
                                }
                            }
                        }
                    }
                }
            }
            File.WriteAllText(@"C:\jbs.txt", sb.ToString());
            Console.WriteLine(count);
            Console.WriteLine(count / Math.Pow(6, 5));
        }

        static void T2()
        {
            var Arr=new int[]{1,1,2,2,3};
            var AT = new string[] { "A", "B", "C", "D", "E" };
            var count = 0;
            var dic = new Dictionary<string, int>();
            var rList = new List<String>();
            for (int f1 = 0; f1 < 5; f1++)
            {
                for (int f2 = 0; f2 < 4; f2++)
                {
                    for (int f3 = 0; f3 < 3; f3++)
                    {
                        for (int f4 = 0; f4 < 2; f4++)
                        {
                            for (int f5 = 0; f5 < 1; f5++)
                            {
                                var list=new List<int>(Arr);
                                var k1 = list[f1]; list.RemoveAt(f1);
                                var k2 = list[f2]; list.RemoveAt(f2);
                                var k3 = list[f3]; list.RemoveAt(f3);
                                var k4 = list[f4]; list.RemoveAt(f4);
                                var k5 = list[f5]; list.RemoveAt(f5);
                                var tmp = string.Format("{0}-{1}-{2}-{3}-{4}", k1, k2, k3, k4, k5);
                                if (!dic.ContainsKey(tmp))
                                {
                                    dic[tmp] = 1;
                                    //Console.WriteLine(tmp);
                                    var arr1 = new int[] { k1, k2, k3, k4, k5 };
                                    var g1 = "";
                                    var g2 = "";
                                    var g3 = "";
                                    for (int i=0;i<5; i++)
                                    {
                                        var a=arr1[i];
                                        if (a == 1)
                                        {
                                            g1 += AT[i] + "-";
                                        }
                                        if (a == 2)
                                        {
                                            g2 += AT[i] + "-";
                                        }
                                        if (a == 3)
                                        {
                                            g3 += AT[i] + "-";
                                        }
                                    }
                                    if (string.Compare(g1 , g2)>0)
                                    {
                                        var tmp2 = g1;
                                        g1 = g2;
                                        g2 = tmp2;
                                    }

                                    var rStr = g1.Trim("-".ToCharArray()) + " "
                                                      + g2.Trim("-".ToCharArray()) + " "
                                                      + g3.Trim("-".ToCharArray());
                                    rList.Add(rStr);
                                    //Console.WriteLine(rStr+"    :"+(count+1));
                                    count++;

                                }
                                else
                                {
                                    dic[tmp]++;
                                }
                           
                            }
                        }
                    }
                }
            }
            foreach (var item in rList.OrderBy(ent => ent).ToList())
            {
                Console.WriteLine(item);
            }
            Console.WriteLine(count);
        }
    }
}
View Code

按 C(5,2) *6  C(3,2)*5 *4  /   6^5算

5個里取2個,這一組由6種點數

余下的3個里取2個,這組里有5種點數

余下的1個有4種點數

但是結果是3600,實際是1800,注意上面組合輸出可見,A-B  C-D E   與 C-D  A-B E是重復的,

因為將5個色子,分成  2  2  1三組,組內部考慮重復,但是組間是有順序的,由於 一二兩組都是 2 個元素,所以一二組是重復了2!次

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM