С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125

Проверить представимо ли число в виде суммы некоторого количества чисел 2020 и 2021

24.12.2021, 20:20. Показов 1491. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод
Поликарпу запомнился 2020-й год, и он рад приходу нового 2021-го года. Чтобы запомнить такой замечательный момент, Поликарп хочет представить число n в виде суммы некоторого количества чисел 2020 и некоторого количества чисел 2021.

Например, если:

n=4041, то число n представимо в виде суммы 2020+2021;
n=4042, то число n представимо в виде суммы 2021+2021;
n=8081, то число n представимо в виде суммы 2020+2020+2020+2021;
n=8079, то число n нельзя представить в виде суммы чисел 2020 и 2021.
Помогите Поликарпу понять, может ли число n быть представлено в виде суммы некоторого количества чисел 2020 и некоторого количества чисел 2021.

Входные данные
Первая строка содержит одно целое число t (1≤t≤104) — количество наборов входных данных. Далее следуют t наборов входных данных.

Каждый набор входных данных содержит одно целое число n (1≤n≤106) — число, которое Поликарп хочет представить в виде суммы чисел 2020 и 2021.

Выходные данные
Для каждого набора входных данных в отдельной строке выведите:

«YES», если число n представимо в виде суммы некоторого количества чисел 2020 и некоторого количества чисел 2021;
«NO» в противном случае.
Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Пример
входные данные
5
1
4041
4042
8081
8079
выходные данные
NO
YES
YES
YES
NO
Мой код:
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
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<string> a[n];
    int f;
    for (int i = 0; i < n; i++)
    {
        cin >> i;
        f = 0;
        if (i < 2020)
        {
            a.push_back("NO");
            continue;
        }
        for (int j = 0; j <= i / 2021; j++)
        {
            for (int h = 0; h <= i / 2020; h++)
            {
                if (2020 * j + 2021 * h == i)
                {
                    a.push_back("YES") ;
                    f = 1;
                }
            }
        }
        if (f == 0)
        {
            a.push_back("NO");
        }
    }
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << "\n"
    }
    return 0;
}
Компилятор выдает ошибку [Error] request for member 'push_back' in 'a', which is of non-class type 'std::vector<std::__cxx11::basic_string< char> > [n]' в 18 строке. Что тут не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2021, 20:20
Ответы с готовыми решениями:

Определить представимо ли число в виде суммы 2х простых чисел
Определить представимо ли число содержащиеся в ячейке 0200 в в виде суммы 2х простых чисел. использовать подпрограмму того, что число...

Определить представимо ли число, содержащееся в ячейках 0200, 0201 в виде суммы квадратов двух чисел
помогите пожалуйста решить задачку=) Определить представимо ли число, содержащееся в ячейках 0200, 0201 в виде суммы квадратов двух...

Написать программу, которая вычисляет наименьшее К такое, что заданное натуральное число N представимо в виде суммы K квадратов натуральных чисел
Рекурсия. Написать программу, которая вычисляет наименьшее К такое, что заданное натуральное число N представимо в виде суммы K квадратов...

14
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
24.12.2021, 20:30
Цитата Сообщение от Senoki Посмотреть сообщение
t (1≤t≤104)
я правильно понял что 104 это 10000?
t (1≤t≤104)
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32
24.12.2021, 20:58
Какие тут вектора, задача на 2+2...
 Комментарий модератора 
П.5.18.Правил
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Вставьте кодом
Вложения, ожидающие проверки
Тип файла: png 1.png
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
24.12.2021, 21:18
Senoki, поправил Ваш код:
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
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<string> a;
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        cin.get();
        bool f = false;
        if (x < 2020)
        {
            a.push_back("NO");
            continue;
        }
        for (int j = 0; j <= x / 2020; j++)
        {
            for (int h = 0; h <= x / 2021; h++)
            {
                if (2020 * j + 2021 * h == x)
                {
                    a.push_back("YES") ;
                    f = true;
                    goto brk;
                }
            }
        }
brk:
        if (!f)
        {
            a.push_back("NO");
        }
    }
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << "\n";
    }
    cin.get();
    return 0;
}
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
24.12.2021, 21:27
Цитата Сообщение от zss Посмотреть сообщение
f = true;
                    goto brk;
Цитата Сообщение от zss Посмотреть сообщение
brk:
        if (!f)
brk лишнее это
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
24.12.2021, 21:56
А если так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
 
using namespace std;
 
string formingSum(int n) {
  int q = n / 2020;
  int r = n % 2020;
  return r <= q ? "YES" : "NO";
}
 
int main() {
  // количество чисел, требующих обработки, во входном потоке
  int t;
  cin >> t;
 
  while (t-- > 0) {
    int n;
    cin >> n;
    cout << formingSum(n) << endl;
  }
  return 0;
}
Добавлено через 13 минут
Только надо добавить проверку на n > 0
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
24.12.2021, 22:15
Цитата Сообщение от shadowmaan Посмотреть сообщение
int q = n / 2020;
  int r = n % 2020;
  return r <= q ? "YES" : "NO";
что будет с ответом 4042?
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
24.12.2021, 22:51
4042 = 2021 + 2021

q = 4042 / 2020 = 2
r = 4042 % 2020 = 2

Поэтому ответ будет YES

Добавлено через 19 минут
Это, в принципе, основано на следующем

Целочисленное деление
n/m = q + r (частное + остаток)

4042 / 2020 = 2020 * 2 + 2 = (2020 + 2020) + (1 + 1)

Каждую пару 2020 + 1 можно заменить на 2021. Если количество 1 превышает количество 2020, то таким единицам нет парной 2020, значит сумма не складывается только из 2020 и 2021.
2
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
26.12.2021, 13:53  [ТС]
zss, что значит cin.get()?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
26.12.2021, 14:24
Это пропуск одного символа из потока ввода.
В данном случае надо пропустить оставшийся от предыдущего ввода символ '\n' (клавиша enter).
Тогда в конце программы по cin.get() будет ожидаться ввод, и окно не закроется.
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
26.12.2021, 21:58
Вот тут я не понимаю. Если вызвать cin.get() и буфер клавиатуры пуст, то функция будет ожидать ввода. Как это согласуется со следующим описанием функции get(), которое говорит что функция вернёт eof если буфер пуст?

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
iostream
 
  extern istream cin;
 
iosfwd
 
  typedef basic_istream<char>       istream;
 
  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_istream;
 
istream
 
  template<typename _CharT, typename _Traits>
    class basic_istream : virtual public basic_ios<_CharT, _Traits>
 
      /**
       *  @brief  Simple extraction.
       *  @return  A character, or eof().
       *
       *  Tries to extract a character.  If none are available, sets failbit
       *  and returns traits::eof().
      */
      int_type
      get();
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
27.12.2021, 00:24
Цитата Сообщение от shadowmaan Посмотреть сообщение
Как это согласуется со следующим описанием функции get(), которое говорит что функция вернёт eof если буфер пуст?
Там такого не написано. Там написано, что она вернет eof, если символ "not available". Но при чтении с клавиатуры символ всегда available, кроме специальных ситуаций, создаваемых искусственно платформенно-зависимыми средствами.
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
27.12.2021, 01:19
А почему при чтении с клавиатуры символ всегда available?

Добавлено через 36 минут
Я ошибочно полагал что доступность символа определяется исключительно наличием/отсутствием оного в буфере клавиатуры. Но с клавиатуры символ всегда доступен, т.к. по-видимому, предполагается что пользователь всегда может что-то с клавиатуры ввести, а значит символ всегда есть.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
27.12.2021, 02:55
Цитата Сообщение от shadowmaan Посмотреть сообщение
А почему при чтении с клавиатуры символ всегда available?
Ну это вполне естественное поведение входных потоков. Так и должно быть. Если входной поток не может сразу предоставить очередной символ - это совсем не обязательно означает, что он закончился. Это может просто обозначать, что выходной поток пока не готов предоставить этот символ. Такое явление запросто может возникать и при чтении файлов с медленных устройств.

Так работают пайпы. Так работает стандартный поток ввода, когда он привязан к клавиатуре: он настроен на вечное ожидание ввода, как будто это бесконечный файл.

Создать ситуацию "конец файла" в клавиатурном входном потоке можно, но, еще раз, это требует специальных телодвижений.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
27.12.2021, 11:50
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это может просто обозначать, что выходной поток пока не готов предоставить этот символ.
Поправка:

Это может просто обозначать, что входной поток пока не готов предоставить этот символ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2021, 11:50
Помогаю со студенческими работами здесь

Любое чётное число представимо в виде суммы двух простых
Уважаемые участники форума хотелось бы услышать ваше мнение по статье в области теории чисел https://yadi.sk/d/apHLJHIG3XBY9D стр.21-22 ...

Представимо ли данное натурально число в виде суммы двух простых слагаемых
Составить программу, позволяющую выяснить, представимо ли данное натурально число M (M&gt;2) в виде суммы двух простых слагаемых, больших...

Вычислить наименьшее К такое, что заданное N представимо в виде суммы K квадратов натуральных чисел
Нужна программа, которая вычисляет наименьшее К такое, что заданное натуральное N представимо в виде суммы K квадратов натуральных чисел....

представить число в виде суммы наименьшего количества чисел фибоначчи
представить число в виде суммы наименьшего количества чисел фибоначчи

Определить процедуру, определяющую, представимо ли натуральное число в виде разности квадратов двух натуральных чисел
Дано натуральное число m. Среди чисел 1,2, ..., m найти все те, которые можно представить в виде разности квадратов двух натуральных чисел.


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru