Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 21.10.2018, 13:36
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от Задорожный Виталий
Интересный код.
В условии не сказано что вы уже изучили. Задачки ведь решают для закрепления пройденного материала.
Скорей всего вам такое решение нужно:
function summa_6(n, arr) {

    if (arr.length <= 100) {
        let arr_6 = [];
        
        for (let i = 0; i < arr.length; i++) {
            if (!(arr[i] % 6) && arr[i] <= 300) {
                arr_6.push(arr[i]);
            }
        }

        //console.log(arr_6);

        let sum = 0;

        for (let i = 0; i < arr_6.length && i < n; i++) {
            sum += arr_6[i];
        }
        
        //console.log(sum);

        return sum;
    }
}

// Пример вызова:
summa_6(5, [1, 2, 3, 4, 5, 6, 7, 8, 12, 24, 300, 350, 450, 1250, 18, 36]);

логи можете удалить или раскомментировать чтоб посмотреть массив кратный 6 и результат.
Ответить с цитированием
  #32 (permalink)  
Старый 22.10.2018, 01:48
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Существует множество натуральных чисел N, из которых можно составить, например, такие последовательности
⟨0, 1, 2, 3, ...⟩ возрастающая последовательность элементов множества натуральных чисел.
⟨1, 10, 100, 1000, ...⟩ последовательность степеней десяти
⟨2, 3, 5, 7, ...⟩ последовательность простых чисел
⟨0, 1, 0, 1, ...⟩ чередующаяся последовательность 0 и 1

Все эти последовательности являются последовательностями натуральных чисел, поскольку элементы этих последовательностей принадлежат множеству натуральных чисел. Троеточие в записи последовательности указывает на бесконечность последовательности, т. е. вы можете всегда получить следующее число последовательности независимо от того, сколько чисел вы уже получили.

Последовательность ⟨5, 4, 10, 8⟩ составлена из конечного числа элементов множества натуральных чисел. Количество чисел в этой последовательности – 4.

Я могу попросить вас составить для меня последовательность, состоящую из i чисел. Вы составляете ⟨n₁, n₂, n₃, ..., nᵢ⟩, где n₁, n₂, n₃, ..., nᵢ принадлежат множеству натуральных чисел. Вы их выбираете в любом порядке. (вариантов – бесконечное число) И это тоже последовательность натуральных чисел.

Сообщение от Задорожный Виталий
Напишите программу которая в последовательности натуральных чисел определяет сумму чисел, кратных 6. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число кратное 6. Кол-во чисел не превышает 100. Введённые числа не превышают 300. Программа должна вывести одно число - сумму чисел кратных 6.
В задаче вас просят найти в введённой пользователём последовательности натуральных чисел сумму чисел, кратных 6. Понятно, что вы можете представить последовательность в виде массива соответствующей длины. Ну а дальше алгоритм, описывающий сложение только кратных 6.

Код:
 Алгоритм: суммирование чисел, кратных 6
 Параметры: массив чисел seq

	1. Пусть s равно 0
	2. Для каждого числа v из массива seq повторять:
		а. Если v mod 6 = 0, то s := s + v
	3. Вернуть s
function summation(seq) {
	return seq.reduce((sum, v) => v % 6 === 0 ? sum + v : sum, 0);
}
Вот суть решения. Но, почему это так сложно и вызывает затруднения?

Сообщение от Задорожный Виталий
вариантов была масса
В первом представленном варианте вообще не учитывался ввод пользователя! Однако даже если и учитывается, то даже если вариантов ввода пользователя много, то вариант решения только один. Делимость числа определяется однозначно, ввод пользователя – тоже однозначен – это последовательность чисел типа Array<Number> (даже если вариантов ввода пользователя много). И ответ типа Number зависит от ввода. Здесь не может быть масса ответов! При вводе одинаковых исходных данных вы всегда будете получать один и тот же ответ. И алгоритм, описывающий сложение только кратных 6 однозначно это определяет. Вы конечно можете по разному записать алгоритм на языке программирования, но алгоритм для решения задачи один.

Согласно алгоритму, ответ вычисляется за один проход по массиву. Однако почему-то в теме считается, что что-то там можно неожиданно для всех оптимизировать до двух или даже трёх!!! проходов по массиву.

Сообщение от MC-XOBAHCK
я понял только то, что условие задачи не корректно
В условии описывается, что должна делать программа с входными данными. Приводятся факты о входных данных. Указано, что ожидается на выходе. Приведите вашу цепочку логических рассуждении, приведших вас к такому заключению – «условие задачи не корректно».

Ещё мне интересно, почему утверждение «Кол-во чисел не превышает 100» вы переделываете в «Кол-во чисел не может быть больше 100»?

Если последовательность составлена из чисел множества натуральных чисел N без нуля, то из
утверждения «В последовательности всегда имеется число кратное 6» можно вывести утверждение «Сумма чисел кратных 6 не равна 0». Вы же почему-то сомневаетесь, что это так, и предполагаете, что «В последовательности всегда должно быть число кратное 6».


Факты о входных данных дают вам гарантии. Пользователь может ввести последовательность натуральных чисел ⟨300, 300, 300, ..., 300⟩ состоящую из 100 элементов. Все числа кратны 6 и сумма равна 30000. Это гарантирует вам, как программисту на JavaScript, что результат вычислен верно, поскольку результат не больше наибольшего безопасного целого числа Number.MAX_SAFE_INTEGER. В типизированных языках это помогло бы выбрать необходимый числовой тип.

Вот моё решение...
(function main() {
	alert(
		"Программа, которая в последовательности натуральных " +
		"чисел определяет сумму всех чисел, кратных 6"
	);
	var sum = 0;
	var n = +prompt("Введите количество чисел в последовательности");
	var v;

	for(var i = 1; i <= n; i++) {
		v = +prompt("Введите число (" + i + " из " + n + ")");

		if(v % 6 === 0)
			sum += v;
	}

	alert("Сумма чисел, кратных 6 – " + sum);
})();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разрешить ввод только цифр и минуса в начале? xecic jQuery 6 20.08.2018 18:27
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Подскажите пожалуйста как сделать задание Альбиночка Общие вопросы Javascript 1 28.11.2011 18:47