JavaScript问题:一个有一百个随机数字的数组中(可能有重复数字),随机抽取十个,且这十个数字不重复。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript问题:一个有一百个随机数字的数组中(可能有重复数字),随机抽取十个,且这十个数字不重复。相关的知识,希望对你有一定的参考价值。

请问用JS代码怎么写

<script>
//比如这个数组有100多个值
var arr = new Array(1,3,2,3,5,5,4,6,8,9,10,11,11,12,12,13,13,14);

//获取数组中的随机值函数
function rand(arr)
    var num = parseInt(Math.random()*(arr.length));
    return arr[num];


//创建一个新数组
arr2 = new Array();

//从arr中抽出10个不重复的值赋予arr2
var i = 1;
while(i<=10)
    num = rand(arr);
    //判断num随机值在arr2中是否已存在
    if(arr2.indexOf(num) == -1)
        arr2[i] = num;
        document.write('抽取的第'+i+'个数字为'+num+'<br>');
        alert('抽取的第'+i+'个数字为'+num);
        i++;
    else
        alert('抽取的结果中已存在'+num+'需要重新获取');
    




</script>

参考技术A var arr = [];//先定义一个数组,循环给数组付值100次,你可以手动的给一些相同的值
for(var i = 0; i<100; i++)
arr[i] = i;

var out = [];//定义接收数组
var num = 10;//定义随机个数
while(out.length < num)
var temp = Math.floor(Math.random() * arr.length + 1)-1;
for(var i = 0; i<out.length; i++)
if(out[i]!=arr[temp])
out.push(arr[temp]);


追问

死循环了吧···

追答

Array.prototype.unique = function ()
this.sort(); //先排序
var res = [this[0]];
for (var i = 1; i < this.length; i++)
if (this[i] !== res[res.length - 1])
res.push(this[i]);


return res;

function myFunction()
var arr = []; //先定义一个数组,循环给数组付值100次,你可以手动的给一些相同的值
for (var i = 0; i < 100; i++)
arr[i] = i;

var out = []; //定义接收数组
var num = 10; //定义随机个数
while (out.length < num)
var temp = Math.floor(Math.random() * arr.length + 1) - 1;
out.push(arr[temp]);
out.unique();//数组去重


刚刚不好意思,手写的代码没有测试

一百万个数求前一百个

在内存有限的情况下,求出一百万个数的前一百个。

解题思路:首先想到的是将一百万个数分成一百份,一份就是一万个,然后以一万建一个最小堆求出前一百个,一百份又是一万个这样就能求出前一百个;

代码如下:


#include<windows.h>

#include<vector>

#include<ctime>

#include<cstdlib>

#include<iostream>

using namespace std;


const int N=10000;

const int K=100;


void CreateArray(vector<int>&array)

{

srand(time(0));

array.reserve(N);

for (size_t i = 0; i < N; i++)

{

array.push_back(rand() % 10000);

}

for (size_t j = N-K; j < N; j++)

{

array[j] = rand()%N;

}

}



void AdjustDown(int* a, size_t size, int root)

{

int child = root * 2 + 1;

while (child < size)

{

if (child + 1 <size && a[child + 1] < a[child])

{

++child;

}

if (a[child] < a[root])

{

swap(a[child], a[root]);

root = child;

child = 2 * root + 1;

}

else

{

break;

}

}

}


void Gettop(vector<int>&array)

{

int a[K] = {};

for (size_t i = 0; i < K; i++)

{

a[i] = array[i];

}

for (int i = (K - 2) / 2; i >= 0; i--)

{

AdjustDown(a, K, i);

}

for (int j = K; j < N; j++)

{

if (a[0]<array[j])

{

a[0] = array[j];

AdjustDown(a, K, 0);

}

}

for (size_t i = 0; i < K; i++)

{

cout << a[i] << " ";

}

cout << endl;

}

void Test()

{

vector<int>array;

CreateArray(array);

Gettop(array);


}


本文出自 “溪风” 博客,请务必保留此出处http://xiexiankun.blog.51cto.com/10785425/1775367

以上是关于JavaScript问题:一个有一百个随机数字的数组中(可能有重复数字),随机抽取十个,且这十个数字不重复。的主要内容,如果未能解决你的问题,请参考以下文章

强!真不愧是人类高质量男性!仅用三行代码就从一千个数字随机选出了一百个不同的数字!

强!真不愧是人类高质量男性!仅用三行代码就从一千个数字随机选出了一百个不同的数字!

强!真不愧是人类高质量男性!仅用三行代码就从一千个数字随机选出了一百个不同的数字!

eltable表格不超过一百个字符

php截取一段文字的前一百个字的问题

c语言写出第一个游戏:猜数字