首页 新闻 会员 周边 捐助

一个具有挑战的算法算法

1
悬赏园豆:50 [已解决问题] 解决于 2011-11-22 19:08

有一组数据,有20个数据,现在需要计算任意不重复的2个数,3个数,... 20个数相加??

求算法.

Eric.Hu的主页 Eric.Hu | 初学一级 | 园豆:140
提问于:2011-11-08 14:21
< >
分享
最佳答案
1
 1 int array[20];
2 int cSum;
3 int iTotal;
4 scanf("%d",&cSum);
5 int used[20];
6 for(int i = 0;i<cSum; i++)
7 {
8 int number = GetUniqueNumber(i);
9 iTotal += number;
10 }
11 printf("%d",iTotal);
12
13 int GetUniqueNumber(int i)
14 {
15 int index = rand();
16 while(index in used[20])
17 {
18 index = rand();
19 }
20 reutrn array[index];
21 }

我上面写的只是伪码,请见谅!

收获园豆:13
Repository | 小虾三级 |园豆:610 | 2011-11-08 22:43
其他回答(7)
0

建立一个数组,把20个数据放到数组里,然后把再进行组合。

收获园豆:5
hlpvb | 园豆:210 (菜鸟二级) | 2011-11-08 14:32

我现在就是要这个组合的算法,能详细些吗?

支持(0) 反对(0) Eric.Hu | 园豆:140 (初学一级) | 2011-11-08 14:35
0

不重复主要是指的什么不重复  不是太明白

收获园豆:2
在北落 | 园豆:159 (初学一级) | 2011-11-08 15:47

表述有问题,不重复主要是表现在随机取数中的,这里可以忽略不考虑的.

支持(0) 反对(0) Eric.Hu | 园豆:140 (初学一级) | 2011-11-08 15:50
0

新建一个数组,把原来数组不重复的数字放入新数组。

计算的时候 直接用新数组计算~

收获园豆:5
死白的man | 园豆:2135 (老鸟四级) | 2011-11-09 08:05
0

//参数:int[]:将20个数据放入数组中

//参数:要抽取多少个

//最后返回结果 抽取数的和

public int GetRandomSum(int[] array,int num)
        {
            int count = 0;
            string ran = "";    
            bool result=false;
            Random random = new Random();           
            for (int j = 0; j < num; j++)
            {
                int len = random.Next(array.Length);
                if (ran == "")
                {
                    ran = len + "|";
                    count += array[len] ;
                    num--;
                }
                else
                {
                    string[] ranlist = ran.Split('|');
                    foreach (string rl in ranlist)
                    {
                        if (rl != "")
                        {
                            result = rl == len.ToString() ? false : true;
                            if (!result)
                            {                               
                                break;
                            }
                        }
                    }
                }

                if (result)
                {
                    count += array[len] ;
                    ran += len + "|";
                }
                else
                {
                    num++;
                }
            }
            return count;
        }

收获园豆:13
KivenRo | 园豆:1734 (小虾三级) | 2011-11-09 16:43
0

1: 放到一个数组中,比如 int[20] ints;

2: 第一次随机范围 0~19,把随机数当作下标,从数据中取出, 然后把这个数和 ints[19]交换

3:第二次随机范围 0~18,把随机数当作下标,从数据中取出, 然后把这个数和 ints[18]交换

 

这是经典的洗牌算法!

收获园豆:5
小红™ | 园豆:210 (菜鸟二级) | 2011-11-10 00:32
0

用dfs 或者 二进制枚举,很简单的哈

收获园豆:5
OpenOrz | 园豆:235 (菜鸟二级) | 2011-11-16 18:47
0

新建一个数组,把原来数组不重复的数字放入新数组,就可以计算了啊

 

 

收获园豆:2
liveandevil | 园豆:182 (初学一级) | 2011-11-17 22:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册