Задать вопрос
@alexsteadfast
I am noob

Как сгенерировать случайное число, содержащее две единицы?

Задача: Сформировать массив из случайных чисел, в которых ровно две еденицы, стоящие на случайных позициях
Необходимо написать на нативном js.
  • Вопрос задан
  • 311 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно сыграть с девятиричной системой. Раз тут цифра "1" особенная, а остальные девять обычные. Берём случайное число, записываем его в девятиричной системе n.toString(9) – используются цифры от 0 до 8 и точно нет ни одной девятки. Единицы меняем на девятки. Остаётся добавить две единицы на случайных позициях.

function tworandom() {
  const arr = Math.floor(Math.random() * 9e8).toString(9).replace(/1/g,9).split('');
  for (let i = 2; i > 0; i--) arr.splice(Math.floor(Math.random() * arr.length), 0, 1);
  return +arr.join('');
}

[...Array(5)].map(tworandom)
// 6401715726, 950818173966, 915469690179, 4191464422, 223063891715
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const rand = (max, min = 0) =>
  Math.floor(Math.random() * (max - min)) + min;

const createArr = ({
  length,
  digit,
  digitCount,
  max = Number.MAX_SAFE_INTEGER,
}) =>
  Array.from({ length }, function() {
    const digits = `${rand(max, 10 ** (digitCount - !!digit))}`
      .replace(RegExp(digit, 'g'), (_, i) => this[rand(this.length, +!(i || digit))])
      .split('');

    const index = [...digits.keys()].slice(+!digit);

    for (let i = 0; i < digitCount; i++) {
      digits.splice(index.splice(rand(index.length), 1)[0], 1, digit);
    }

    return +digits.join('');
  }, [...Array(10).keys()].filter(n => n !== digit));

const arr = createArr({
  length: 5,
  digit: 1,
  digitCount: 2,
  max: 10 ** 5,
});
Ответ написан
Комментировать
@freelion93
Мне не ясно с задания это в массиве должны быть единицы или единицы должны быть в числах данного массива.
Данное решение для случая где в массиве случайным образом единички, решение не элегантное но простое и понятное
function create(length, range) {
	//создаем массив
	let arr = [];
	//заполняем массив случайными числами из заданного диапазона
	for (const i = 0; i < length; i++) {
		if (i = pos1 || i=pos2)
			continue;
		arr[i].push(Math.random(range));
	}
	//выбираем 2 случайные позиции в массиве
	let pos1 = Math.random(length);
	let pos2 = Math.random(length);
	//если позиции совпадают меняем одну из них на новую случайную
	while (pos1 == pos2){
		pos2 = Math.random(length);
	}
	//добавляем единицы в выбранные случайные позиции
	arr[pos1] = 1;
	arr[pos2] = 1;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimovich85
@dimovich85 Куратор тега JavaScript
https://u-academy.net/
Александр, Вы подписались, что PHP разработчик, напишите функцию на php, а мы поможем на js перевести. Тут уже написали 100500 вариантов, но все же, вопрос и бесплатный заказ разные вещи. Функция ну просто простая... неужели совсем нет идей как сделать? Напишите в вопросе алгоритм, как Вы его видите, тогда есть смысл помогать с кодом, где Вам не достает знаний js.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы