2016-12-16 6 views
1

Мне нужно сгенерировать 5 случайных чисел в определенном диапазоне от 1 до 100 без дубликатов.Создать уникальное случайное число «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 указал вы можете использовать список.

  • Сформировать список в соответствии с Range
  • Попа п числа из них случайным образом один на один
  • Написать выскочили Цифры листа

Вот пример.

/*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; 
} 

Demo Ссылка: (Пожалуйста, скопируйте код в ваш диск/лист, не может получить разрешение на рабочий)

Сценарий: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-UOMAagZD1IKzJJFFrrpppHHMKQ/edit#gid=0 –

0

Простой способ может быть:

  • Сформировать список из 100 номеров
  • Перемешать список с помощью алгоритма Fisher-Yates
  • Возьмите первые 5 чисел

Есть более быстрые способы, но только для 100 целых чисел это должно быть хорошо.

Edit: Попробуйте этот код:

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(); для (var x = 1; x <= range.getWidth(); x ++) { для (var y = 1; y <= range.getHeight(); y ++) { var number = (Math.floor (Math) .random() * (max - min + 1)) + min); range.getCell (y, x) .setValue (число); } } }; –

+0

Спасибо, что взяли инициативу .... в настоящее время я использовал ниже скрипт и работаю нормально, но случайные числа, поступающие дубликаты и в указанном диапазоне. Однако вместо указанного диапазона мне нужно указать 5 случайных чисел под ячейкой A4 до A8. –

Смежные вопросы