A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 130880130880 于 2014-8-2 00:30 编辑

产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
请问怎么实现!

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

16 个回复

正序浏览
学习了,刚好在复习Contains 这个,嘿嘿,
回复 使用道具 举报

是c#吧               
回复 使用道具 举报
为爱编程 发表于 2014-7-30 20:25
数组也有Contains方法吗?

有啊。。
回复 使用道具 举报
总结的不错,值得学习
回复 使用道具 举报
本帖最后由 马振伟 于 2014-7-31 10:07 编辑

不断的重复用contains的话,会有很多多余的循环,可以考虑随机索引,然后把随机到的索引对应的数字移除,这样只要100次循环就可以了

以下是项目中我们用的代码,在一个给定集合中,获取一系列不重复的元素,根据你的需求,第一个参数就是一个1~100之间数字组成的集合,用一个for循环就可以创建出来了,第二个参数是100,第三个参数决定你是否不想更改原来集合元素的顺序,如果选了false,原来集合和返回值是一样的
  /// <summary>
    /// 在一个集合中获取一系列不重复随机数(同一个索引元素不会获取两次,不考虑集合本身元素重复)
    /// </summary>
    /// <param name="sourceList">源集合</param>
    /// <param name="neededCount">需求的数量</param>
    /// <param name="sourceListSafe">是否保留源集合,如果为true,则传入集合不会被更改</param>
    /// <returns></returns>
    public static List<int> GetNoRepeatList(List<int> sourceList, int neededCount, bool sourceListSafe)
    {
        List<int> result = new List<int>();
        if (neededCount > sourceList.Count)
        {
            Debug.LogError("需求的数量超出原始集合长度,请确认参数");             return null;
        }
        List<int> copyList = sourceListSafe ? CopyList(sourceList) : sourceList;
        int index;
        for (int i = 0; i < neededCount; i++)
        {
            index = Random.Range(0,  copyList.Count);
            result.Add(copyList[index]);
            copyList.RemoveAt(index);   //移除随机到的元素
        }
        return result;
    }

  /// <summary>
    /// 获取一个集合的浅拷贝副本
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="sourceList"></param>
    /// <returns></returns>
    public static List<T> CopyList<T>(List<T> sourceList)
    {
        List<T> result = new List<T>();
        for (int i = 0; i < sourceList.Count; i++)
        {
            result.Add(sourceList);
        }
        return result;
    }

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
路过 学学习习
回复 使用道具 举报
liangdmaster 发表于 2014-7-30 20:50
二楼的解题无法达到随机数不能重复的目的,三楼是正解。

事实证明运行之后都是不重复的。
回复 使用道具 举报

能不能用,点一下就知道啦~我开始也不知道。点出来的。
回复 使用道具 举报
二楼的解题无法达到随机数不能重复的目的,三楼是正解。
回复 使用道具 举报
u010209195 发表于 2014-7-30 18:03
怎么不用代码段 这样看着不是更加清晰了么?

数组也有Contains方法吗?
回复 使用道具 举报
本帖最后由 向晓伟 于 2014-7-30 19:26 编辑
sunnyboyi 发表于 2014-7-30 19:16
int num = ran.Next(1,100);
这个随机数的范围是 1~99 吧  ,  不会产生100
好像填充数组也有问题  而且 ...

你一说才发现真的没有100~而且填充数组的时候还有0.
填充数组的问题是 复制过来的时候这个论坛的格式直接把我array的下标删除了~
回复 使用道具 举报
向晓伟 发表于 2014-7-30 17:34
int[] array = new int[100];
            Random ran = new Random();
            for (int  ...

int num = ran.Next(1,100);
这个随机数的范围是 1~99 吧  ,  不会产生100
好像填充数组也有问题  而且重复了也就过了, 最后得出的可能没有100个数。
不知道我理解得对卟....  有大神在的话 希望能回复下  呵呵

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;

  6. namespace ConsoleApplication2
  7. {
  8.      class Program
  9.      {
  10.          static void Main(string[] args)
  11.          {
  12.          
  13.              int[] a = new int[100];
  14.              Random rm = new Random();
  15.              int b = 0;
  16.              while (b<100)
  17.              {
  18.                  int r=rm.Next(1,101);
  19.                  if (!a.Contains(r))  //判断随机数是否包含在数组中,不包含则赋值给a[b],并且下标自增
  20.                 {
  21.                      a[b] = r;
  22.                      b++;                    
  23.                  }
  24.              }
  25.              for (int i = 0; i < a.Length; i++)    //做个冒泡排序后输出打印到控制台,可以更直观
  26.             {
  27.                  for (int j = 0; j < a.Length-i-1; j++)
  28.                  {
  29.                      if (a[j] > a[j + 1])
  30.                      {
  31.                          int temp = a[j];
  32.                          a[j] = a[j + 1];
  33.                          a[j + 1] = temp;
  34.                      }

  35.                  }
  36.              }
  37.                  for (int j = 0; j < a.Length; j++)   //遍历打印
  38.                 {
  39.                      Console.WriteLine(a[j]);
  40.                  }
  41.              Console.WriteLine("============================");
  42.              Console.WriteLine(a.Length);
  43.              Console.ReadKey();

  44.          }
  45.      }
  46. }
复制代码

怎么不用代码段 这样看着不是更加清晰了么?

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
         
            int[] a = new int[100];
            Random rm = new Random();
            int b = 0;
            while (b<100)
            {
                int r=rm.Next(1,101);
                if (!a.Contains(r))  //判断随机数是否包含在数组中,不包含则赋值给a[b],并且下标自增
                {
                    a[b] = r;
                    b++;                    
                }
            }
            for (int i = 0; i < a.Length; i++)    //做个冒泡排序后输出打印到控制台,可以更直观
            {
                for (int j = 0; j < a.Length-i-1; j++)
                {
                    if (a[j] > a[j + 1])
                    {
                        int temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }

                }
            }
                for (int j = 0; j < a.Length; j++)   //遍历打印
                {
                    Console.WriteLine(a[j]);
                }
            Console.WriteLine("============================");
            Console.WriteLine(a.Length);
            Console.ReadKey();

        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 向晓伟 于 2014-7-30 19:54 编辑
  1. int[] array = new int[100];
  2.             Random ran = new Random();
  3.             int count = 0;
  4.             for (; count < 100;)
  5.             {
  6.                 int num = ran.Next(1, 101);
  7.                 if(!array.Contains(num))
  8.                 {
  9.                     array[count] = num;
  10.                     count++;
  11.                 }
  12.             }
复制代码

点评

数组怎么能用contains方法?  发表于 2014-7-30 21:16

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马