2016-12-16 134 views
1

我需要在1到100的特定范围内生成5个随机数,但没有重复。在一个范围内生成'n'唯一的随机数

A1 = 1(from) 
A2 = 100(to) 
A3 = 5 (Required random number) 
A4,A5,A6,A7,A8 in cell should generate random number 
+0

请用电子表格举例,我可以理解。 –

回答

0

正如fafl指出,你可以使用列表。

  • 根据范围生成列表
  • 弹出N个数出它们中的随机逐个
  • 写弹出号码到片

下面是一个例子。

/*Note: The Code does not have validations like the random number needed should be less 
than the range etc. You should take care of such issues and improvise the code for the 
same. 
Rest of the code is optimized and makes a single read and write from Spread Making it 
run fast*/ 
function myFunction() { 
    //var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var ss = SpreadsheetApp.openById("1_xoBxknhDm1pM3MBw0Jbat3BTV4HXep7nZlOPw4tEWg"); 
    var sheet = ss.getSheets()[0]; 
    var values = sheet.getRange(1, 2, 3, 1).getValues(); 
    var nRandomNumbers = getNRandomNumbers(values[0][0], values[1][0], values[2][0]); 
    sheet.getRange(4,2,values[2][0],1).setValues(nRandomNumbers); 
} 
function getRandomNumber(min, max) { 
    return Math.random() * (max - min) + min; 
} 
function getNRandomNumbers(from, to, n){ 
    var listNumbers = []; 
    var nRandomNumbers = []; 
    for(var i = from; i <= to; i++) { 
    listNumbers.push(i); 
    } 
    for(var i = 0; i < n; i++) { 
    var index = getRandomNumber(0, listNumbers.length); 
    nRandomNumbers.push([listNumbers[parseInt(index)]]); 
    listNumbers.splice(index, 1); 
    } 
    return nRandomNumbers; 
} 

演示链接:(请将代码复制到您的驱动器/片,不能获得工作许可)

脚本:https://script.google.com/d/1hsWiGCFZ3DlxiSB3ysTr5ThWvDzThS-vBVzHrJCIEW8zM4_DzndCwGkQ/edit?usp=sharing

表:https://docs.google.com/spreadsheets/d/1_xoBxknhDm1pM3MBw0Jbat3BTV4HXep7nZlOPw4tEWg/edit#gid=0

+0

如果您不介意可以分享电子表格。我无法运行脚本 –

+0

@Nagaraj Shet我在一个记事本上做了这段代码,我会编辑它并添加一些更多的描述。希望能帮助到你。当我到家时,我会链接一个工作的应用程序。现在我不能。 –

+0

以下是电子表格链接https://docs.google.com/spreadsheets/d/1ikLPx7ltkmliwxhq-UOMAagZD1IKzJJyFlrbpEHOMKQ/edit#gid=0 –

0

一个简单的方法可以是:

  • 生成100号
  • 列表使用费雪耶茨算法
  • 在第一个5个号码随机播放列表

有更快的方法,但只有100个整数应该没问题。

编辑:试试这个代码:

function shuffleArray(array) { // from http://stackoverflow.com/a/12646864/5710637 
    for (var i = array.length - 1; i > 0; i--) { 
     var j = Math.floor(Math.random() * (i + 1)); 
     var temp = array[i]; 
     array[i] = array[j]; 
     array[j] = temp; 
    } 
    return array; 
} 

function Randomnumber() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = sheet.getRange("c2:C5"); 
    var min = sheet.getRange("A1").getValue(); 
    var max = sheet.getRange("A2").getValue(); 
    var numbers = [] 
    for (var i = min; i <= max; i++) { 
    numbers.push(i); 
    } 
    shuffleArray(numbers) 
    var counter = 0; 
    for (var x = 1; x <= range.getWidth(); x++) { 
    for (var y = 1; y <= range.getHeight(); y++) { 
     range.getCell(y, x).setValue(numbers[counter]); 
     counter++; 
    } 
    } 
}; 
+0

感谢您采取主动...... –

+0

function Randomnumber(){ var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange(“c2:C5”); var min = sheet.getRange(“A1”)。getValue(); var max = sheet.getRange(“A2”)。getValue(); 为(品种X = 1; X <= range.getWidth(); X ++){ 为(VAR Y = 1; Y <= range.getHeight(); Y ++){ VAR数=(Math.floor(数学.random()*(max - min + 1))+ min); range.getCell(y,x).setValue(number); } } }; –

+0

感谢您采取主动....目前我使用下面的脚本和工作正常,但随机数来重复,并在指定的范围内。 然而,不是指定的范围,我需要在单元格A4到A8下指定5个随机数。 –

相关问题