15.06.2022, 19:48
|
Аспирант
|
|
Регистрация: 18.01.2011
Сообщений: 93
|
|
Математическая задачка на JS (часть кода внутри)
Привет всем, есть простая математическая задачка, пытаюсь ее написать на javascript. Суть задачи - получить 10-значное число, в котором
первая цифра соответствует количеству единиц в числе;
вторая цифра - количеству двоек;
третья цифра - количеству троек;
...
десятая цифра - количеству нулей.
получается вот такое число 2 1 0 0 0 1 0 0 0 6
как кодом его его получить?
Кроме как написать каркас с рекурсией дальше у меня не идет, нужна помощь гуру))
let a = [];
let b = [];
function number(left, pos) {
if (pos == 10) {
if (left == 0) {
b.splice(0, a.length)
for (i = 0; i < 10; i++) {
++b[a[i]];
}
// наверное дальше надо как то сравнить оба массива??
}
} else {
for (i = 0; i <= left; i++) {
a[pos] = i;
number(left - i, pos + 1);
}
}
}
number(10, 0);
Заранее спасибо!
|
|
15.06.2022, 20:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Volonter
|
получить 10-значное число
|
??? условие многовариантное, может не получить, а проверить?
|
|
15.06.2022, 20:07
|
Аспирант
|
|
Регистрация: 18.01.2011
Сообщений: 93
|
|
рони,
именно получить, сгенерировать как бы. Задача вообще для 5-го класса, число получается вот такое 2 1 0 0 0 1 0 0 0 6
как мне казалось, надо как сдвигать нули в массиве, начиная с 10, записывая кол-во нулей в конец массива, но все пошло не так и уперся))
Последний раз редактировалось Volonter, 15.06.2022 в 20:10.
|
|
15.06.2022, 22:36
|
Аспирант
|
|
Регистрация: 18.01.2011
Сообщений: 93
|
|
Спасибо, так даже интереснее будет подумать)) но код от гуру увидеть всегда полезно))
|
|
16.06.2022, 12:09
|
Аспирант
|
|
Регистрация: 18.01.2011
Сообщений: 93
|
|
Vlasenko Fedor,
вот есть вопрос, челове пишет что "очевидно, что сумма цифр в числе равна 10", а откуда он это взял? если не знать ответа, разве как то можно это определить? На мой взгляд, из условия задачи мы понимаем только то, что 1) последняя цифра точно не ноль, так как он есть, 2) первая тоже не ноль, так как число с нуля не начинается. А от суммы 10 строится вся логика проверок.
|
|
16.06.2022, 13:49
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от Volonter
|
челове пишет что "очевидно, что сумма цифр в числе равна 10", а откуда он это взял?
|
потому что каждая цифра обозначает некоторое количество цифр. А их всего 10.
|
|
16.06.2022, 13:52
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
решал эту задачу давно, на бумаге.
стартовал от "первого приближения" 0000000009, потом за несколько итераций "улучшал" результат, исправляя косяки - 0000000108, 1000000108, 2100000108, ..., и быстро дошел до итогового. Но вот как это формализовать для программы, чтобы не зациклилось, сходу не очень понятно...
|
|
16.06.2022, 17:16
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Методом проб, ошибок и тыка
(но никак не научных размышлений)
Составил такой алгоритм, который очень быстро получает это число
let res = [0,0,0,0,0,0,0,0,0,0];
const count = (dig) => res.filter(v => v === dig).length;
const test = () => {
for (let i = 0; i<10; i++) {
const dig = i < 9? i+1 : 0;
if (count (dig) != res[i]) return false;
}
return true;
}
const change = () => {
const newa = [];
for (let i = 0; i<10; i++) {
const dig = i < 9? i+1 : 0;
const nd = count (dig)
if (nd != res[i]) {
res[i] = nd;
}
}
}
let n = 0;
while (!test()) {
change ();
n++;
console.log(n, [...res]);
}
console.log ('FINISH : ', n, res)
Ничуть не претендую на красоту алгоритма и кода
Но находит результат с любого начального значения (res)
Последний раз редактировалось voraa, 17.06.2022 в 10:59.
|
|
16.06.2022, 18:31
|
Аспирант
|
|
Регистрация: 18.01.2011
Сообщений: 93
|
|
voraa,
Маэстро, снимаю шляпу! Спасибо!
|
|
|
|