Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 10.10.2016
Сообщений: 51

Оптимизировать поиск числа способов представить число в виде суммы четырёх положительных целых чисел

10.10.2016, 17:31. Показов 5009. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сумма

Задано целое положительное целое число x. Найдите число способов представить его в виде суммы четырёх положительных целых чисел x = a + b + c + d, где a ≤ b ≤ c ≤ d.

Формат ввода
В первой строке входного файла содержится число x (1 ≤ x ≤ 1500)

Формат вывода
В выходной файл выведите ответ на задачу

Пример 1

Ввод Вывод
3 0

Пример 2

Ввод Вывод
5 1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
using namespace std;
int main()
{
    int x, a, b, c, d;
    long long k;
    cin >> x;
    k = 0;
    for (d = x - 3; d >= 1; d--)
        if (d * 4 >= x)
        for (c = d; c >= 1; c--)
            if ((d + c < x) && (d + c*3 >= x))
                for (b = c; b >= 1; b--)
                    if ((d + c + b < x) && (b*2 + c + d >= x))
                        for (a = b; a >= 1; a--)
                            if (a + b + c + d == x)
                                k++;
    cout << k;
    return 0;
}
Вроде бы работает правильно, но долго. Нужно, чтобы для максимально допустимого значения x программа выводила ответ не более чем за одну секунду.
Как можно ускорить её работу?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2016, 17:31
Ответы с готовыми решениями:

Определить, можно ли представить заданное число в виде суммы четырех простых чисел
Люди,помоги решить задачку: Дано натуральное число n. Можно ли представить его в сумме четырех простых чисел? Вывести на печать все...

Рекурсия (алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы)
Нужно написать рекурсивный алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы, каждое слагаемое...

Представить целое число N в виде суммы M примерно равных целых чисел.
В голове не приходит нормального решения. Именуйте темы осмысленно! Название темы должно максимально полно отражать её содержимое.

3
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
10.10.2016, 17:34
_D4rki_, Тут вряд ли поможет тупо перебор, нужно задействовать знания по математике и алгоритмам.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
10.10.2016, 18:36
_D4rki_, перебор, конечно, можно сократить. Например, строка 9
C++
1
for (d = x - 3; d >= x/4; d--)
В том же духе модифицировать и все остальные циклы
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
10.10.2016, 20:40
C++
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//Задано целое положительное целое число x. Найдите число способов
//представить его в виде суммы четырёх положительных целых
//чисел x = a + b + c + d, где a ≤ b ≤ c ≤ d.
 
//Формат ввода
//В первой строке входного файла содержится число x (1 ≤ x ≤ 1500)
 
//Формат вывода
//В выходной файл выведите ответ на задачу
 
//Пример 1
 
//Ввод Вывод
//3 0
 
//Пример 2
 
//Ввод Вывод
//5 1
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
///////////////////////////////////////////////////////////////////////////////
typedef long long   T_int;
///////////////////////////////////////////////////////////////////////////////
T_int   count_partitions_with_parts_count_with_min_part
    (
        T_int   n,
        T_int   k,
        T_int   part_min    =   1
    )
{
    if( k == 1 )
    {
        return  n   >=  part_min;
    }
 
    T_int   res{};
 
    for( T_int  i{ part_min }; i <= n / k; ++i )
    {
        res     +=  count_partitions_with_parts_count_with_min_part
                        (
                            n   -   i,
                            k   -   1,
                            i
                        );
    }//for
 
    return  res;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        T_int   n{};
        std::cout   <<  "n = ";
        std::cin    >>  n;
 
        std::cout   <<  count_partitions_with_parts_count_with_min_part(n, 4)
                    <<  std::endl
                    <<  std::endl;
    }//for
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2016, 20:40
Помогаю со студенческими работами здесь

Определить количество способов, какими задуманное число можно представить в виде суммы
Составить алгоритм, определяющий количество способов, какими задуманное число n&gt;1 можно представить в виде суммы n=i^3+j^3, ...

Верно ли, что любое натуральное число можно представить в виде суммы кубов пяти целых чисел. Докажите своё утверждение
Верно ли, что любое натуральное число можно представить в виде суммы кубов пяти целых чисел. Докажите своё утверждение

Число 1729 можно представить в виде суммы кубов двух чисел двумя способами. Найдите эти числа
индийский математик обратил внимание на то что число 1729 можно представить в виде суммы кубов двух чисел двумя способам.найдите эти...

Дано натуральное число P. Найти все натуральные числа, которые нельзя представить в виде суммы двух простых чисел
Дано натуральное число P. Найти все натуральные числа, которые нельзя представить в виде суммы двух простых чисел.

Определить, можно ли представить заданное натуральное число в виде произведения четырех последовательных чисел
Третья: Определить, можно ли представить заданное натуральное число в виде произведения четырех последовательных натуральных чисел.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru