生成0到9的随机排列

生成0到9的随机排列,每一个数据只出现一次,每次运行结果不一样。

1、解题思路:利用rand()函数随机生成10个数,然后对其排序,此时的原始数据的下标就是0到9的随机顺序

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void swap(int a[], int i, int j) //交换数据 
{
    int t;
    t=a[i];
    a[i]=a[j];
    a[j]=t;
}

void insort(int a[], int b[], int n) //升序排序 
{
    int i,j;
    for(i=0; i<9; i++)
    {
        for(j=i+1; j<9; j++)
        {
            if(b[j]<b[i])
            {
                swap(b,i,j);
                swap(a,i,j);    
            }
        }
     } 
}

void randnumber(int a[], int n)
{
    int i;
    int b[9];
    srand((unsigned int)time(NULL));
    for(i=0;i<9;i++)
    {    
        b[i]=rand()%9+1;
        a[i]=i+1;
    }
    insort(a,b,n);
    
}

int main()
{
    int a[9];
    int i;
    randnumber(a,9);        
    
    for(i=0;i<9;i++)
        printf("%d ",a[i]);

    return 0;
    
}
 
参考资料:https://blog.csdn.net/cighao/article/details/49072111

2、利用C++自带的shuffle函数,函数功能:使用随机生成器g对元素[first, last)可行交换的容器内部元素进行随机排列。其函数模型为

  1. template <class RandomAccessIterator, class URNG>

  2. void shuffle (RandomAccessIterator first, RandomAccessIterator last, URNG&& g)

  3. {

  4. for (auto i = (last-first) - 1; i > 0; --i) {

  5. std::uniform_int_distribution<decltype(i)> d (0,i);

  6. swap (first[i], first[d (g)]);

  7. }

  8.  

函数必须与标准库默认的随机生成器一起使用,随机生成器的头文件是<random>。如果要使用不需要传入随机生成器函数可以参照random_shuffle函数。

参数first, last

顺序容器迭代器的开头(begin)和结尾(end),在[first, end)这个区间内的数值将会被随机排序。顺序容器的迭代器必须是定义有swap函数的数据类型以及顺序容器也必须支持元素可交换。

g

唯一随机数生成器的一个实例,在头文件<random>中定义。URNG 是 uniform random number generator的缩写。

#include <iostream>
#include <vector>
#include <algorithm> // std::move_backward
#include <random> // std::default_random_engine
#include <chrono> // std::chrono::system_clock
 
int main (int argc, char* argv[])
{
    std::vector<int> v;
 
    for (int i = 0; i < 10; ++i) {
        v.push_back (i);
    }
 
    // obtain a time-based seed:
    unsigned seed = std::chrono::system_clock::now ().time_since_epoch ().count ();
    std::shuffle (v.begin (), v.end (), std::default_random_engine (seed));
 
    for (auto& it : v) {
        std::cout << it << " ";
    }
 
    std::cout << "\n";
 
    return 0;
}

参考资料:https://blog.csdn.net/cywosp/article/details/17958895

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值