| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1575 人关注过本帖
标题:C#关于随机数抽取问题
只看楼主 加入收藏
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:6 
程序代码:
            int[] intList = new int[33];    //你的数据集合

            for (int i = 1; i <= 33; i++)   //为数组添加数据
            {
                intList[i - 1] = i;
            }

            //查询随机的六个数字
            var tempList = from t1 in intList
                    orderby Guid.NewGuid()
                    select t1;

            int count = 0;                  //用于保存六个数字计算的总和
            string showInts = "";           //用于输出六个数字的字符串
            while(true)
            {
                foreach (int st in tempList.Take(6))    //tempList.Take(6)取六个数字,这里可根据变化而改变
                {
                    count += st;            //循环计算总和
                    showInts += st + ",";   //循环累积数字
                }

                if (count == 97)            //符合条件 ---(可以与界面上的某个textbox中的值进行比较).
                {
                    this.TextBox1.Text = showInts;  //输出需要的结果
                    return;                 //结果查询
                }
                count = 0;                  //一次未打到合适的数字,清空总和,用于下一次计算
                showInts = "";              //同上
            }

这里是取得一组数字.
如果想多组,直接控制while即可.

[ 本帖最后由 bygg 于 2010-9-30 11:44 编辑 ]

飘过~~
2010-09-30 11:42
wwfhz123
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-9-29
收藏
得分:0 
            if (input())//验证是否为空
            {
                string Num;

                Num = txtNum.Text;

                int sum = 0, total = int.Parse(Num);

                int numbert = 6;
                int i = 1;
                int temp = 0;
                int startnumber = 1, endnumber = 33;
                int[] number = new int[34];
                int[] random = new int[6];
                for (i = 1; i <= endnumber; i++)
                {
                    number[i] = i;
                }
                Random R = new Random();
                temp = R.Next(startnumber, endnumber);
                i = 1;
                random[0] = temp;
                do
                {
                    for (i = 1; i < numbert; i++)
                    {
                        random[i] = 0;
                        int j = 0;
                        bool flag = false;
                        temp = R.Next(startnumber, endnumber);
                        do
                        {
                            for (j = 0; j < i; j++)
                            {
                                if (temp != random[j])
                                {
                                    flag = true;
                                }
                                else
                                {
                                    j = -1;
                                    temp = R.Next(startnumber, endnumber);
                                    flag = false;
                                }
                            }

                        } while (flag == false);
                        random[i] = temp;
                    }
                    sum = 0;
                    for (i = 0; i < numbert; i++)
                    {
                        sum += random[i];
                    }
                } while (sum != total);

                string test = "";

                for (i = 0; i < numbert; i++)
                {
                    test += random[i].ToString() + " ";
                }
                txtNum1.Text = random[0].ToString();
                txtNum2.Text = random[1].ToString();
                txtNum3.Text = random[2].ToString();
                txtNum4.Text = random[3].ToString();
                txtNum5.Text = random[4].ToString();
                txtNum6.Text = random[5].ToString();
            }

这串代码 应该把while放在何处阿...
2010-09-30 14:08
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
你的代码太多了,呵呵,用我的代码比较好.

飘过~~
2010-09-30 14:16
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
程序代码:
        /// <summary>
        /// 从int数组中随机取数字,符合条件便输出
        /// </summary>
        /// <param name="intList">存放数字的数组</param>
        /// <param name="num">每一组数据需要取得的数字个数</param>
        /// <param name="count">需要取多少组这样的数字</param>
        /// <param name="condition">取得的一组数字中的总和</param>
        /// <returns></returns>
        static private List<List<int>> GetRandomInts(int[] intList, int num, int count, int condition)
        {
            List<List<int>> intsResult = new List<List<int>>();

            //查询随机的六个数字
            var tempList = from t1 in intList
                           orderby Guid.NewGuid()
                           select t1;

            int sum = 0;                        //用于保存六个数字计算的总和

            while (intsResult.Count < count)    //如果还未取满count组数字
            {
                List<int> subItem = new List<int>();
                foreach (int st in tempList.Take(num))    //tempList.Take(num)取六个数字,这里可根据变化而改变
                {
                    sum += st;                  //循环计算总和
                    subItem.Add(st);            //循环累积数字
                }

                if (sum == condition)            //符合条件并
                {
                    subItem.Sort();             //排序 
                    intsResult.Add(subItem);    //结果查询
                }

                subItem = null;
                sum = 0;                  //清空总和,用于下一次计算
            }
            return intsResult;
        }


调用:
程序代码:
            int[] intList = new int[33];    //你的数据集合

            for (int i = 1; i <= 33; i++)   //为数组添加数据
            {
                intList[i - 1] = i;
            }

            //表示多intList中取数字
            //6:表示每一组数字取6个
            //2:需要取多少组这样的数字
            //97:每一组数字的总和
            List<List<int>> intsResult = GetRandomInts(intList, 6, 2, 97);    //intsResult 就是所要的东西

飘过~~
2010-09-30 14:57
wwfhz123
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-9-29
收藏
得分:0 
我把你的代码 放到C#里会报错

好多语法 我都没见过

            var tempList = from t1 in intList
                           orderby Guid.NewGuid()
                           select t1;
这个就不知道什么意思
2010-09-30 16:37
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
我是用的2008.
2005里跑不起来的,嘿嘿

飘过~~
2010-09-30 19:45
快速回复:C#关于随机数抽取问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020154 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved