Форум программистов, компьютерный форум CyberForum.ru

Задача про монахов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Stans
 Аватар для Stans
78 / 54 / 3
Регистрация: 05.12.2009
Сообщений: 435
25.10.2011, 16:57     Задача про монахов #1
Условие такое:
Имеется n монахов и m пирогов. Ведущий монах съедает за один раз 10 пирогов, обычный - 5, ученик монаха - 0.5. Вывести все возможные варианты, при которых n монахов съедят m пирогов. Нужно, чтобы каждый из монахов использовался хотя бы один раз.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 16:57     Задача про монахов
Посмотрите здесь:

C++ Задача про шахматы
C++ Задача про год
Задача про Лестницу C++
Задача про температуру C++
C++ Задача про дату!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
25.10.2011, 17:13     Задача про монахов #2
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 <conio.h>
#include <clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int m, n;
    cout<< "Ââåäèòå êîëè÷åñòâî ìîГ*Г*õîâ: ";
    cin>> n;
    cout<< "Ââåäèòå êîëè÷åñòâî ïèðîãîâ: ";
    cin>> m;
    for (int i = 1; i <= n-2; i++)
        for (int j = 1; j <= n-2; j++)
            for (int k = 1; k <= n-2; k++)
                if (i * 10 + j * 5 + k * 0.5 == m && i + j + k == n)
                    cout<< "ÂåðõîâГ*ûé ìîГ*Г*Гµ: "<< i
                        << "\nÎáû÷Г*ûé ìîГ*Г*Гµ: "<< j
                        << "\nÓ÷åГ*ГЁГЄ ìîГ*Г*ГµГ*: "<< k;
    getch();
    return 0;
}
Stans
 Аватар для Stans
78 / 54 / 3
Регистрация: 05.12.2009
Сообщений: 435
25.10.2011, 17:19  [ТС]     Задача про монахов #3
Примерно это я себе и представлял. Но мне нужно сделать задачу с использованием не более чем двух циклов(в идеале, с одним циклом). sorry за то, что сразу не указал
vndtta
66 / 43 / 5
Регистрация: 17.10.2011
Сообщений: 146
Завершенные тесты: 1
25.10.2011, 17:20     Задача про монахов #4
Цитата Сообщение от MrGluck Посмотреть сообщение
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 <conio.h>
#include <clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int m, n;
    cout<< "Ââåäèòå êîëè÷åñòâî ìîГ*Г*õîâ: ";
    cin>> n;
    cout<< "Ââåäèòå êîëè÷åñòâî ïèðîãîâ: ";
    cin>> m;
    for (int i = 1; i <= n-2; i++)
        for (int j = 1; j <= n-2; j++)
            for (int k = 1; k <= n-2; k++)
                if (i * 10 + j * 5 + k * 0.5 == m && i + j + k == n)
                    cout<< "ÂåðõîâГ*ûé ìîГ*Г*Гµ: "<< i
                        << "\nÎáû÷Г*ûé ìîГ*Г*Гµ: "<< j
                        << "\nÓ÷åГ*ГЁГЄ ìîГ*Г*ГµГ*: "<< k;
    getch();
    return 0;
}
если монахов 2, а пирогов 1 - программа ничего не выдаст, хотя должна выдать 0 0 2
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
25.10.2011, 17:22     Задача про монахов #5
Цитата Сообщение от vndtta Посмотреть сообщение
если монахов 2, а пирогов 1 - программа ничего не выдаст, хотя должна выдать 0 0 2
ну так по условию
Цитата Сообщение от Stans Посмотреть сообщение
Нужно, чтобы каждый из монахов использовался хотя бы один раз.
vndtta
66 / 43 / 5
Регистрация: 17.10.2011
Сообщений: 146
Завершенные тесты: 1
25.10.2011, 17:25     Задача про монахов #6
Цитата Сообщение от Stans Посмотреть сообщение
Примерно это я себе и представлял. Но мне нужно сделать задачу с использованием не более чем двух циклов(в идеале, с одним циклом). sorry за то, что сразу не указал
C++
1
2
3
4
5
6
...
for(int i=0;i<n;i++){
 if (19*i+9*j == 2*m-n)
  cout<<...
}
...
это если немного подумать
10i + 5j +0.5k = m
i + j + k = n

-> (2*10-1) + (2*5-1)j + (2*0.5-1)k = 2*m-n

правда тут тоже ошибка, надо добавить условие, если есть одни только ученики монахов
C++
1
2
if (0.5*n == m)///0 0 n
       cout<<...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
25.10.2011, 17:33     Задача про монахов #7
Цитата Сообщение от vndtta Посмотреть сообщение
это если немного подумать
10i + 5j +0.5k = m
i + j + k = n

-> (2*10-1) + (2*5-1)j + (2*0.5-1)k = 2*m-n
как то у тебя вышло, что знаменатель при k = 0, т.е. кол-во монахов-учеников может быть любым.

Добавлено через 5 минут
Мб стоит как то отталкиваться от того, что
10 = 5*2 = 0.5 * 20
5 = 0.5 * 10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 12:07     Задача про монахов
Еще ссылки по теме:

C++ Задача про биты
Задача про рюкзак C++

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

Или воспользуйтесь поиском по форуму:
vndtta
66 / 43 / 5
Регистрация: 17.10.2011
Сообщений: 146
Завершенные тесты: 1
26.10.2011, 12:07     Задача про монахов #8
Цитата Сообщение от MrGluck Посмотреть сообщение
как то у тебя вышло, что знаменатель при k = 0, т.е. кол-во монахов-учеников может быть любым.

Добавлено через 5 минут
Мб стоит как то отталкиваться от того, что
10 = 5*2 = 0.5 * 20
5 = 0.5 * 10
учеников монахов находим из формулы i+j+k=n; k=n-i-j
Yandex
Объявления
26.10.2011, 12:07     Задача про монахов
Ответ Создать тему
Опции темы

Текущее время: 00:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru