zoukankan      html  css  js  c++  java
  • 随机序列问题

    题目:

    假设有一个数组,里面有10个元素 int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。请写一个算法,得到a数组的一个随机排列。要求时间复杂度尽量小,可以使用random函数。例如输出的随机序列可以是:3 6 2 4 5 1 9 8 0

    思路:

    1.将最大值max设置为9,在0~max之间产生一个随机数;

    2.将数组a的max下标的值和产生下标的值互换,同时max--;

    3.重复步骤1,2直到max==0停止循环,最后a中的数为原来数的随机排列。

    代码如下:

    #include<iostream>
    #include<ctime>
    using namespace std;
    //定义交换数组元素函数
    void ss(int a[],int x,int len)
    {
        if(x!=len)
        {
            int temp=a[x];
            a[x]=a[len];
            a[len]=temp;
        }
    }
    //数组随机排列的实现
    int* Rfan(int a[],int length)
    {
        int len=length-1;
        while(len>0)
        {
            srand((int)time(NULL));//时间种子
            int x=rand()%(len+1);//产生随机数
            ss(a,x,len);
            len--;
        }
        return a;
    }
    
    int main()
    {
        int a[10]={0,1,2,3,4,5,6,7,8,9};
        int *b=Rfan(a,10);
        for(int i=0;i<10;i++)
        {
            cout<<b[i]<<endl;
        }
    }
  • 相关阅读:
    提单管理
    SAP Using Text Modules in Adobe Forms
    创建设备任务清单
    HR常用事务代码
    SAP 如何查看用户登录信息
    abap常用函数
    CK13物料价格评估的数据ALV显示
    常用事务代码
    计算物料制造成本估算,比较重要的表
    IT_sort用法实例
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4467520.html
Copyright © 2011-2022 走看看