qq_34830331
2017-05-13 10:03
采纳率: 33.3%
浏览 4.0k

如何循环十次就产生10个1-100不重复的随机数,最好用C或者说出代码思想

如何循环十次就产生10个1-100不重复的随机数,最好用C,lua或者说出代码思想,跪求大神

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • jokercsj 2017-05-14 10:29
    已采纳

    假设需要的数范围是 n,需要输出m个不重复的数,理想情况是算法的时间复杂度为O(m)
    算法如下:
    1. 建立一个数组大小为 n 的数组 arr,分别存放 1 到 n 的数值;
    2. 生成一个从 0 到 n - 1 的随机数 x;
    3. 输出 arr 下标为 x 的数值,即为第一个随机数;
    4. 将 arr 的尾元素和下标为 x 的元素互换;
    5. 同2,生成一个从 0 到 n - 2 的随机数 x;
    6. 输出 arr 下标为 x 的数值,为第二个随机数;
    7. 将 arr 的倒数第二个元素和下标为 x 的元素互换;
    ……
    如上,直到输出 m 个数为止

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 青鸟路过佳城 2017-05-13 10:57

    我告诉你思路,先准备一个集合。for循环10次,每次生成一个随机数a,遍历集合里面的数据(当然第一次集合是空的),如果集合中的数等于a或者a等于0 再生成一个随机数赋给a 当遍历集合中的数完后(也就是集合里面的数不重复了),就把a添加进去
    这样重复10次,就会产生10个不重复的数并且在1-100了。我不知道怎么用c写。我用我熟悉的语言写了一个,并测试没有问题。你可以参考下

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;

    public class Demo {
    public static void main(String[] args){
    Random rand=new Random();
    Listlists=new ArrayList();
    for(int i=0;i<10;i++){

    int a=rand.nextInt(100);
    for(int j=0;j<lists.size();j++){
    if(Integer.parseInt(lists.get(j))==a || a==0){
    a=rand.nextInt(100);
    }
    }
    lists.add(a+"");
    }

        for(String str:lists){
            System.out.print(str+"\t");
        }
    }
    

    }

    评论
    解决 无用
    打赏 举报
  • weixin_38733595 2017-05-13 10:59

    (Int)(Math.random()*100+1)

    评论
    解决 无用
    打赏 举报
  • qq_23676873 2017-05-13 17:15

    循环里面加判断,等于就重新生成

    评论
    解决 无用
    打赏 举报
  • x9300 2017-05-14 11:31

    用time函数生成随机种子不就好了

    评论
    解决 无用
    打赏 举报
  • baboon_chen 2017-05-14 18:04

    #include
    #include
    #include

    //time()
    //语法 :
    //
    //
    //#include
    //time_t time(time_t *time);
    //
    //
    //功能: 函数返回当前时间,如果发生错误返回零。如果给定参数time ,那么当前时间存储到参数time中

    //srand()
    //语法 :
    //
    //#include void srand( unsigned seed );
    //功能: 设置rand()随机序列种子。对于给定的种子seed, rand()会反复产生特定的随机序列。
    //

    //rand()
    //语法 :
    //
    //#include int rand( void );
    //功能: 函数返回一个在零到RAND_MAX 之间的伪随机整数

    //rand()函数是生成一个随机数。随机数的范围是0到RAND_MAX之间的数。
    //srand()函数是生成一个随机种子,如果不设置随机种子,则使用rand()函数前默认添加了函数srand(1)。这样你每次运行程序,生成的10个随机数都是一样的。
    //如果你设置srand(11),虽然生成了另外的一组随机数,但也同样,每次运行函数都是生成同样的随机数。
    //time()函数,它根据当前时间返回一个整型值。time(NULL)是一个int型数据,根据当前时间生成的int数。
    //srand(time(NULL)),就能根据每次开始运行程序的时间,生成不同的随机种子。这样每次运行的程序都会生成不同的随机数列。

    int main()
    {
    srand(time(NULL));
    int a;
    for (int i = 0;i < 10;i++)
    {
    a = rand() % 100 + 1; //rand()%100, 随机数的大小是0-100, rand()%100+1,a的范围是1-100;
    printf("%d ",a);
    }

    return 0;
    

    }

    
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题