2016-12-16 124 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個隨機數。 –

相關問題