Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 10

Определить количество 8-значных чисел, у которых сумма цифр в цифровой записи числа больше, чем N

14.05.2018, 00:36. Показов 2693. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано натуральное число N. Определить кол-во 8-значных чисел, у которых сумма цифр в цифровой записи числа больше, чем N. Если таких чисел нет то вывести слово "нет".
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2018, 00:36
Ответы с готовыми решениями:

Определить количество 8-значных чисел,у которых сумма цифр в цифровой записи числа больше,чем N.
Дано натурально число N. Определить количество 8-значных чисел,у которых сумма цифр в цифровой записи числа больше,чем N.Если таких чисел...

Определить количество 8-значных чисел, у которых сумма цифр в цифровой записи числа больше, чем N
Дано натуральное число N. Определить кол-во 8-значных чисел, у которых сумма цифр в цифровой записи числа больше, чем N. Если таких чисел...

Определить количество 8-значных чисел, у которых сумма цифр в цифровой записи числа больше, чем N
1) Дано натуральное число N. Определить кол-во 8-значных чисел, у которых сумма цифр в цифровой записи числа больше, чем N. Если таких...

11
23 / 16 / 7
Регистрация: 17.10.2012
Сообщений: 74
14.05.2018, 09:03
Решение «в лоб» вот такое
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
let numbers = [];
const N = 63;
 
for (let i = 10000000; i <= 99999999; i++) {
    if (numberSum(i) > N) numbers = numbers.concat(i); 
}
 
if (numbers.length > 0) alert(numbers.length);
else alert("нет");
 
function numberSum(number) {
    return number.toString().split("").reduce((result, current) => result + +current, 0);
}
Надеюсь, кто-то из знатоков алгоритмов раскритикует мое решение и предложит вариант производительнее.

P.S. Массив я создал только для того, если автору нужен будет вывод всех совпавших чисел. В противном случае конечно же нужно использовать переменную счётчик и делать ее инкремент:
JavaScript
1
2
3
4
5
6
7
8
let count = 0;
...
    if (numberSum(i) > N) count++;
...
if (count) console.log(count);
else console.log(“net”);
 
// или вообще можно console.log(count || “net”);
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 10
14.05.2018, 10:12  [ТС]
Огpомное спасибо !
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
14.05.2018, 11:55
Цитата Сообщение от froziq Посмотреть сообщение
Надеюсь, кто-то из знатоков алгоритмов раскритикует мое решение и предложит вариант производительнее.
Возможно существует какой-то математический подход, который позволил бы отфильтровать числа, не производя всех вычислений, но в алгоритме тут мало что можно изменить. Разве что вместо concat использовать push, ну и сумму цифр вычислять без преобразования в строку.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        let numbers = [];
        const N = 63;
 
        for (let i = 10000000; i <= 99999999; i++)
        {
            if (numberSum(i) > N) numbers.push(i);
        }
 
        if (numbers.length > 0) console.log(numbers.length);
        else console.log("нет");
 
 
        function numberSum(n)
        {
            let result = 0, d = n, m = 0;
            do
            {
                result += m = d % 10;
                d = (d - m) / 10;
            } while (d > 0)
            return result;
        }
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
14.05.2018, 13:20
Цитата Сообщение от diadiavova Посмотреть сообщение
Возможно существует какой-то математический подход, который позволил бы отфильтровать числа, не производя всех вычислений, но в алгоритме тут мало что можно изменить.
странное у вас понимание термина "алгоритм"
алгоритм -- это, грубо говоря, рецепт
Например, чтобы приготовить глазунью из 3-х яиц, надо разбить 3 яйца и вылить их содержимое на сковородку
как именно вы будете разбивать эти яйца (ножом, вилкой или о край сковороды, сбоку, с острого конца или с тупого) -- это к рецепту (алгоритму) как раз никакого отношения не имеет

коллега froziq предложил алгоритм перебора всех восьмизначных чисел от меньшего к большему с вычислением суммы цифровой записи каждого числа и сравнением каждой суммы с заданным натуральным числом

1) какой именно цикл для этого перебора будет использован (for или while)?
2) с использованием именно какого метода будет вычисляться сумма цифровой записи каждого числа (push или concat)?
эти вопросы относятся к способу реализации алгоритма, но не к самому алгоритму

тот самый упомянутый вами возможный "математический подход, который позволил бы отфильтровать числа, не производя всех вычислений" и будет как раз иным "алгоритмом"

если я прямо сейчас предложу перебирать все восьмизначные числа в обратном порядке, уменьшая их (от 99999999 и до момента, когда цифровая сумма станет равной заданному натуральному числу), что мне кажется тоже "лобовым", но более рациональным -- вот это уже будет другим алгоритмом
------
а если я обращу ваше внимание на то, что цифровая сумма максимального числа 99999999 легко вычисляется как 8 * 9 = 72 и каждое меньшее на n единиц восьмизначное число будет иметь легко вычисляемую цифровую сумму 72 - n, то это уже будет третий алгоритм

а уж какими именно javascript-методами каждый из этих двух моих алгоритмов вы станете реализовывать -- это "дело десятое"
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
14.05.2018, 13:34
Коллега froziq написал
Цитата Сообщение от froziq Посмотреть сообщение
Надеюсь, кто-то из знатоков алгоритмов раскритикует мое решение и предложит вариант производительнее.
На что я ему вполне закономерно заметил, что вряд ли можно найти какой-то другой подход(алгоритм), способный как-то повлиять на производительность. Разве я не об этом написал? Так что же странного в моем понимании?
Цитата Сообщение от kalabuni Посмотреть сообщение
если я прямо сейчас предложу перебирать все восьмизначные числа в обратном порядке, уменьшая их (от 99999999 до 10000000), что мне кажется тоже "лобовым", но более рациональным -- вот это уже будет другим алгоритмом
Это не будет другим алгоритмом.
Цитата Сообщение от kalabuni Посмотреть сообщение
а если я обращу ваше внимание на то, что цифровая сумма максимального числа 99999999 легко вычисляется как 8 * 9 = 72 и каждое меньшее на n единиц восьмизначное число будет иметь легко вычисляемую цифровую сумму 72 - n, то это уже будет третий алгоритм
А вот на это решение я бы посмотрел.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
14.05.2018, 13:54
Цитата Сообщение от diadiavova Посмотреть сообщение
Это не будет другим алгоритмом
будет... вы прочитали и процитировали первую версию... я исправил формулировку, перечитайте:
Цитата Сообщение от kalabuni Посмотреть сообщение
(от 99999999 и до момента, когда цифровая сумма станет равной заданному натуральному числу)
Цитата Сообщение от diadiavova Посмотреть сообщение
Так что же странного в моем понимании?
я кажется, "на пальцах" объяснил: вы полагаете, что разбивая яйца ножом, а не вилкой, вы готовите совсем другую глазунью, а это не так
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
14.05.2018, 13:59
Цитата Сообщение от kalabuni Посмотреть сообщение
от 99999999 и до момента, когда цифровая сумма станет равной заданному натуральному числу)
Я что-то как-то сильно сомневаюсь, что такое решение даст корректный результат. Хотелось бы увидеть его в работе. Чтобы было понятно, что именно вызывает у меня сомнения приведу очень простой пример: число 20 больше 19-ти, но сумма цифр у него меньше. Возможно я просто не понял идею, поэтому и хотелось бы увидеть ее реализацию.

Добавлено через 3 минуты
Цитата Сообщение от kalabuni Посмотреть сообщение
я кажется, "на пальцах" объяснил: вы полагаете, что разбивая яйца ножом, а не вилкой, вы готовите совсем другую глазунью, а это не так
В каком месте я сказал, что готовлю другую? Строго говоря, у меня существенная часть алгоритма изменена. Можно, конечно, вычисление суммы цифр считать несущественным, но это тоже часть алгоритма. Тем не менее, где я сказал, что это другой алгоритм? Я наоборот сказал, что другой ничего не решит, а этот немного подправить можно.
0
14.05.2018, 14:08

Не по теме:

diadiavova, ужасно плохо быть бестолковым" -- это я про себя, если что :)

0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
14.05.2018, 17:31
вот чемпион по скорости
JavaScript
1
2
3
4
5
6
7
8
function quickSumDig(num){
    if(num > 71)
        return 'таких чисел нет';
    let sum8dig = [90000000, 89999999, 89999991, 89999955, 89999835, 89999505, 89998713, 89996997, 89993565, 89987130, 89975691, 89956258, 89924526, 89874510, 89798160, 89684982, 89521698, 89291985, 88976340, 88552125, 87993846, 87273699, 86362395, 85230255, 83848545, 82191000, 80235465, 77965560, 75372255, 72455220, 69223815, 65697620, 61906440, 57889755, 53695620, 49379055, 45000000, 40620945, 36304380, 32110245, 28093560, 24302380, 20776185, 17544780, 14627745, 12034440, 9764535, 7809000, 6151455, 4769745, 3637605, 2726301, 2006154, 1447875, 1023660, 708015, 478302, 315018, 201840, 125490, 75474, 43742, 24309, 12870, 6435, 3003, 1287, 495, 165, 45, 9, 1];
    if(num < 0) num = 0;
    return sum8dig[num];
}
console.log(quickSumDig(65));
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
14.05.2018, 20:10
Кстати есть на самом деле производительное решение. На вид ужас, но вычисляет сразу. Правда адаптировать его к разному количеству разрядов - видимо будет непростто. Но конкретную задачу решает.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        function findNums(min)
        {
            let result = [], current = 1e7-1;
            for (let d1 = 1; d1 < 10; d1++)
            {
                for (let d2 = 0; d2 < 10; d2++)
                {
                    for (let d3 = 0; d3 < 10; d3++)
                    {
                        for (let d4 = 0; d4 < 10; d4++)
                        {
                            for (let d5 = 0; d5 < 10; d5++)
                            {
                                for (let d6 = 0; d6 < 10; d6++)
                                {
                                    for (let d7 = 0; d7 < 10; d7++)
                                    {
                                        for (let d8 = 0; d8 < 10; d8++)
                                        {
                                            if ((d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8) > min) result.push(++current);
                                            else current++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return result;
        }
        console.log(findNums(63).length);
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
15.05.2018, 03:46
diadiavova, имхо,чуть более производительно будет если добавить break в последнем цикле,чтобы не делать лишних итераций, а сумму вычислять в предпоследнем с последующим декрементом её в последнем цикле.как-то так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function sumDig(num) {
    if(num > 71)
        return 'таких чисел нет';
    let count = 0;
    for(let i1 = 9; i1 > 0; i1--)
        for(let i2 = 9; i2 >= 0; i2--)
            for(let i3 = 9; i3 >= 0; i3--)
                for(let i4 = 9; i4 >= 0; i4--)
                    for(let i5 = 9; i5 >= 0; i5--)
                        for(let i6 = 9; i6 >= 0; i6--)
                            for(let i7 = 9; i7 >= 0; i7--){
                                let sum = i1 + i2 + i3 + i4 + i5 + i6 + i7 + 9;
                                for(let i8 = 9; i8 >= 0; i8--, sum--){
                                    if(sum > num)
                                        count++;
                                    else break;
                                }
                            }
    return count;
}
console.log(sumDig(54));//1023660
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2018, 03:46
Помогаю со студенческими работами здесь

Определить количество 8 значных чисел, у которых сумма цифр в цифровой записи числа больше n
Дано натуральное число N . определить кол-во 8 значных чисел , у которых сумма цифр в цифровой записи числа больше , n. Если таких числе...

Определить количество 8-значных чисел, у которых сумма цифр в цифровой записи числа меньше, чем N
Дано натуральное число N. Определить количество 8-значных чисел, у которых сумма цифр в цифровой записи числа меньше, чем N. Если таких...

Определить количество 8-значных чисел, у которых сумма цифр в цифровой записи числа меньше, чем N
Дано натуральное число N. Определить количество 8-значных чисел, у которых сумма цифр в цифровой записи числа меньше, чем N. Если таких...

Определить количество чисел, у которых сумма цифр в цифровой записи числа больше чем К
Дано шестнадцатеричное натуральное число N.Определить количество чисел, у которых сумма цифр в цифровой записи числа больше чем К. Если...

Определить количество 8-значных чисел, у которых сумма цифр меньше ,чем N
Дано натуральное число N. Определить количество 8-значных чисел, у которых сумма цифр меньше ,чем N. Если таких чисел нет ,то вывести слово...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru