Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
1

Задача на комбинаторику

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

Author24 — интернет-сервис помощи студентам
в общем наткнулся на задачу и не могу решить, обидно даже, ведь решал и потяжелее, а сейчас в голову ничего кроме простого долгого перебора не приходит, ну и там чуть чуть улучшенные варианты основанные на переборе.
вводится число, число денег, необходимо вывести либо да либо нет.
да - если это число при любом делении на купюры достоинствами 1,2,5,10,50,100,500,1000,5000 можно поделить поровну и нет в противном случае.
таких чисел, как я предполагаю, мало.
к примеру это число 4, т.к. при всех возможных комбинациях можно поделить на 2 и 2(1+1 и 1+1, 1 и 2, 2 и 2)
следующее число это 24, там такая же ситуация.
входное число до 100000, что даёт знать, что решение тут долговатое.
помогите с идеей пожалуйста, у меня пока-что простой перебор.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2015, 00:00
Ответы с готовыми решениями:

Задача на комбинаторику
Добрый вечер! Который день пытаюсь решить задачу "Счастливые числа": все знают, что счастливые...

Задача про фишки на комбинаторику
У Андрея есть огромное количество фишек N цветов. Он хочет выложить некоторое количество фишек в...

Задача на динамику или комбинаторику
Для заданных натуральных чисел N и K требуется вычислить количество чисел от 1 до N, имеющих в...

Задача на комбинаторику
Добрый вечер! Не могу решить задачу. Дано n животных разных видов: a1 белок, а2 собак, ... аn...

11
63 / 63 / 77
Регистрация: 22.11.2012
Сообщений: 241
Записей в блоге: 1
19.02.2015, 07:36 2
Лучший ответ Сообщение было отмечено Krock21rus как решение

Решение

Может, попробовать решить это как задачу о рюкзаке, в котором число предметов неограниченно?
1
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,506
Записей в блоге: 6
19.02.2015, 09:00 3
C++
1
2
3
4
5
6
7
#include <iostream>
int main(){
    unsigned N; std::cin >> N;
    if(N & 1) std::cout << "no\n";
        else  std::cout << "yes\n";
    return 0;
}
Внимательно читайте или переписывайте условия задачи. В указанной постановке любое четное число можно представить как сумму заданных пар.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2015, 09:27 4
Цитата Сообщение от Ilot Посмотреть сообщение
Внимательно читайте условия задачи. В указанной постановке любое четное число можно представить как сумму заданных пар.
???
Цитата Сообщение от Krock21rus Посмотреть сообщение
при любом делении
Попробуйте поделить справедливо 6 = 5+1
1
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,506
Записей в блоге: 6
19.02.2015, 09:30 5
Байт, ну да. Мой косяк.
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
19.02.2015, 17:00  [ТС] 6
Цитата Сообщение от senich Посмотреть сообщение
Может, попробовать решить это как задачу о рюкзаке, в котором число предметов неограниченно?
можно подробнее?

тут просто чётные не пойдут, ясно что числа которые от одной купюры до этой купюры*2 автоматически не подходят, но вот как узнать другие числа, которые подходят
0
63 / 63 / 77
Регистрация: 22.11.2012
Сообщений: 241
Записей в блоге: 1
19.02.2015, 17:17 7
http://informatics.mccme.ru/mo... php?id=815
1
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
21.02.2015, 13:53  [ТС] 8
вот кстати решение, ото я его сделал, а вам показать не показал
оно просто использует жадный алгоритм, то есть пытается выдать сумму наибольшими купюрами, и считает чтобы одинаковых купюр было чётное кол-во:

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
#include <iostream>
 
using namespace std;
 
const int bankn=9;
 
int main()
{
    int bank[bankn] = {1,2,5,10,50,100,500,1000,5000};
    int n;
    bool otv = false;
    int otv1=-1;
    cin >> n;
    while(n!=0)
    {
        for(int i=bankn-1;i>=0;i--)
        {
            if(n-bank[i]>=0)
            {
                n-=bank[i];
                if(otv==true && otv1!=i)
                {
                    cout << "NO";
                    return 0;
                }
                otv1=i;
                if(otv)
                {
                    otv=false;
                }
                else
                {
                    otv=true;
                }
                break;
            }
        }
    }
    if(otv==true)
    cout << "NO";
    else
    cout << "YES";
}
1
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.02.2015, 14:04 9
Цитата Сообщение от Krock21rus Посмотреть сообщение
if(otv==true)
Масло - масляное (истинно ли что, otv имеет значение Истина).
C++
1
if(otv)
Аналогично
C++
1
 if(otv && otv1!=i)
Добавлено через 3 минуты
Цитата Сообщение от Krock21rus Посмотреть сообщение
if(otv)
{
otv=false;
} else
{
otv=true;
}
записывается одной строкой
C++
1
otv=!otv;
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
13.04.2015, 20:04  [ТС] 10
Цитата Сообщение от zss Посмотреть сообщение
if(otv==true)
Масло - масляное (истинно ли что, otv имеет значение Истина).
Код C++
1
if(otv)
Аналогично
Код C++
1
if(otv && otv1!=i)
Добавлено через 3 минуты
Цитата Сообщение от Krock21rus Посмотреть сообщение
if(otv)
{
otv=false;
} else
{
otv=true;
}
записывается одной строкой
Код C++
1
otv=!otv;
думаю это всего лишь стиль программирования, суть от этого не изменится, только обьём кода

Я как-то изучал mysql, и там было сказано что это язык программирования высокого уровня, т.к. там можно перевести запросы и понять их, после этого я начал часто прочитывать свой код
к примеру с этим же otv:

if(otv)
{
что-то
}
это:
если(ответ)
тогда что-то
обычный новичёк не поймёт, да и если тебе не вбилось в голову что любое значение, если оно не 0 в конструкции if означает true, то ты тоже не поймёшь, поэтому я предпочитаю
if(otv==true)
{
что-то
}
что читается как:
если ответ это истина, тогда делаем что-то
на быстром просмотре кода эта конструкция, лично для меня, читается и понимается быстрее, чем сокращённая
0
8-BITOV
13.04.2015, 21:00
  #11

Не по теме:

Цитата Сообщение от Krock21rus Посмотреть сообщение
обычный новичОк не поймёт
Если в "обычном новичке" видеть полного дебила, тогда, пожалуй, вы и правы. Но я, как-то, о наших новичках составил лучшее мнение...:)

0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
13.04.2015, 21:28  [ТС] 12
честно говоря мне 15 лет всего, и я ещё в 9 классе, и многие мои одноклассники как-раз новички которые не понимают if(otv)
если будет otv иметь тип int, тогда новичку будет трудно
0
13.04.2015, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2015, 21:28
Помогаю со студенческими работами здесь

задача на комбинаторику
.Из полной колоды карт вынули две карты, сколько существует вариантов, вынуть карты разной масти?...

Задача на комбинаторику
Условие: (Время: 1 сек. Память: 16 Мб Сложность: 63%) Для заданных натуральных чисел N и K...

Задача на комбинаторику
Имеется план местности, разбитой на квадраты, заданный матрицей размера NxN. Каждый квадрат имеет...

Пирожные(Задача на комбинаторику)
Пирожные Для праздничного чаепития необходимо купить n пирожных. В магазине продается всего два...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru