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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Tomikun
1 / 1 / 0
Регистрация: 16.03.2012
Сообщений: 47
#1

Задачка про стол. Размещение гостей без повторений - C++

25.07.2013, 13:22. Просмотров 2395. Ответов 13
Метки нет (Все метки)

Представьте, что вы собираетесь пригласить к себе шестерых гостей, но за
вашим столом могут разместиться всего лишь 4 человека Сколькими
способами можно разместить четырех из шести гостей за обеденным сто-
лом'<> Каждый из шести гостей может разместиться на первом стуле. Каж-
дый из оставшихся пяти гостей может занять второй стул. На третьем
стуле может разместиться один их четырех гостей, и на четвертом — один
из трех оставшихся гостей. Двоим из гостей не достанется ни одного
места. Таким образом, число возможных рассадок гостей за столом равно
6*5*4*3 = 360. Напишите программу, которая будет производить аналогич-
ные вычисления для любого числа гостей и любого числа мест за столом
(при этом предполагается, что число гостей не меньше числа мест). Про-
грамма не должна быть сложной, и вычисление можно организовать с по-
мощью простого цикла for.

Обясните пожалуста принцип , есле у меня например 8 гостей и 5 мест для них то мне надо 8*7*6*5*4 - ? а то чтота заплутался .

Добавлено через 9 минут
только не пишите свою програму только обясните немножко ок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2013, 13:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задачка про стол. Размещение гостей без повторений (C++):

Задача про гостей - C++
Задача: представьте, что вы намерены пригласить к себе шестерых гостей, но за вашим столом могут поместиться всего лишь 4 человека....

Задача про круглый стол (динамические массивы) - C++
Помогите решить задачу. Условие. За круглым столом собралось 10 участников, номера стульев от 1 до 10 по порядку. Случайным образом...

Задачка про треугольник. - C++
Для вас эта задача очень легкая, но я не как не могу ее сделать. Пожалуйста помогите! Условие такое : В треугольнике (см. рис. 1.8,...

Задачка про спорт - C++
Вводятся фамилии спортсменов и их результаты в соревнованиях по прыжкам в длину. После ввода данных очередного спортсмена выводить...

Задачка про массивы - C++
Только начала изучать программирование, пытаюсь разбиратся ,но не всё так просто , помогите пжлст решить задачку на массивы Даны два...

задачка про ящики - C++
Имеется 8 ящиков у всех вес по 2 кг, а у одного 1 кг, записать это все в массив и определить в каком по номеру элементе массива содержится...

13
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
25.07.2013, 13:23 #2
Ты "что-тО не пУтайся", можешь правильное название задачи сказать?
0
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,919
25.07.2013, 13:26 #3
это не программирование это комбинаторика
Цитата Сообщение от Tomikun Посмотреть сообщение
. Про-
грамма не должна быть сложной, и вычисление можно организовать с по-
мощью простого цикла for.
число гостей m
число стульев n
C++
1
2
3
int c=1;// количество комбинаций
for(int i=0;i<n;i++)
 c=c*(m-i);
1
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
25.07.2013, 13:29 #4
Если бы ты внимательно читал книгу то ты бы знал как задачу решить
Если ты читаешь эту книгу значит ты учишься, ты новичёк, да?
Ну прочитай ещё раз внимаательно 3 главу, или, ещё лучше, 1 2 и 3 главу

Добавлено через 28 секунд

Не по теме:

А я украинец, и, как видишь, русский хорошо знаю

0
Tomikun
1 / 1 / 0
Регистрация: 16.03.2012
Сообщений: 47
25.07.2013, 13:33  [ТС] #5
ValeryS спасибо вам большое.
0
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,919
25.07.2013, 13:42 #6
ну немного теории
сколькими способами можно посадить 5 человек на 1 стул -пятью
теперь берем два стула
на первый стул пятью
на оставшийся стул нужно посадить четыре человека -четыре
задача привелась к предыдущей только количство стульев и гостей уменьшилось
возьмем три стула
на первый пять комбинаций
на второй четыре комбинации
на последний стул претендуют три человека три комбинации
потом их перемножаем 5*4*3=60
как видишь задача всегда приводится к предыдущей
на лицо рекурсия

вот ее решение с рекурсией
C++
1
2
3
4
5
6
7
int fnc (int m,int n)
 {
    if(n==0)
    return 1;
  return m*fnc(m-1,n-1);
 
 }
Добавлено через 4 минуты
пардон решение хоть и правильное но несколько нелогичное
вот так будет правильней
C++
1
2
3
4
5
6
int fnc (int m,int n)
{
 if(n==1) // если стул один  
  return m; // то вернем количество комбинаций равное числу гостей
 return m*fnc(m-1,n-1);// иначе умножим количество гостей на результат который вернет функция с уменьшенным количеством гостей и стульев
}
1
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 163
25.07.2013, 19:32 #7
Даниил1991, вы чего такой борзый? Это его личное дело, какие задачи решать. Если вы считаете себя таким умным, лучше помогайте, а не выпендривайтесь.
P.s. Простите, сударь, за мой нелитературный язык, но очень уж выбесили
1
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
25.07.2013, 21:02 #8
Ну зачем так сразу налетать...Нехорошо это, к словам придираться, ведь если я запятую где-то лишнюю поставил, или не поставил, то это не повод говорить что я плохо знаю русский Я стараюсь чем-то помочь, хоть с задачей я и не смог помочь, но всё же...
Нужно уметь сдерживаться, а не высказывать всё что думаете
Вы уж извините что я вам морали читаю, и без меня всё знаете
Но спасибо вам, уважаемый salam, Ryabchik,TimeToWork, за то что указали мне на мои ошибки
2
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
25.07.2013, 21:56 #9
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdint>
 
int main()
{
    setlocale(LC_CTYPE, "");
    uint32_t guests, chairs;
    std::cout << "Number of guests...";
    std::cin >> guests;
    std::cout << "Number of chairs...";
    std::cin >> chairs;
 
    if (chairs > guests) {
        std::swap(chairs, guests);
    }
 
    uint64_t combinations = 1;
    while (chairs--) combinations *= guests--;
    std::cout << combinations;
    return 0;
}
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.07.2013, 07:28 #10
Цитата Сообщение от Tomikun Посмотреть сообщение
Обясните пожалуста принцип
принцип прост - размещение без повторений из n элементов по k:
http://www.cyberforum.ru/cgi-bin/latex.cgi?A_n^k = \frac{n!}{(n-k)!}=n(n-1)...(n-k+1)
0
igoreshka3333
0 / 0 / 0
Регистрация: 01.08.2014
Сообщений: 3
03.08.2014, 12:04 #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <iomanip.h>
 
 
int main()
{
 int chairs, guests, j;
 cout <<"Guests, chairs: "; cin >> guests >> chairs;
 int comb1 = guests - chairs + 1;
 int comb2 = guests - chairs + 1;
 for (int i=1; i<chairs; i++)
 {
   j = comb2*(comb1+i);
   comb2 = j;
 }
 cout << j;
 getch ();
}
Вот решение!
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
03.08.2014, 15:50 #12
C
1
2
3
4
5
6
7
8
unsigned int seat_comb(unsigned int guests, unsigned int chairs)
{
    unsigned int comb = 1;
    while( chairs-- ) {
        comb *= guests--;
    }
    return comb;
}
0
slater
0 / 0 / 0
Регистрация: 27.09.2015
Сообщений: 26
03.10.2015, 20:00 #13
Цитата Сообщение от igoreshka3333 Посмотреть сообщение
comb2 = j;
А как при присвоении к comb2 значения j получилось 360?

Добавлено через 18 минут
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>
 
using namespace std;
 
int main()
{
    setlocale(0, "");
 
    int guest, seats, count = 1;
    cout << "Ввдетие число гостей:";
    cin >> guest;
    cout << "Ввдетие число стульев:";
    cin >> seats;
 
    for (int i = guest; i > guest-seats; i--)
    {
        count = count* i;
    }
    cout << count;
    system("pause");
    return 0;
}
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
03.10.2015, 20:19 #14
slater, для кого ты это пишешь? На дату посмотри.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2015, 20:19
Привет! Вот еще темы с ответами:

Задачка про Коня и Короля - C++
Задана шахматная доска, на которой расставлены черные и белые фигуры, в том числе белый король и черный конь. Определить, может ли белый...

Задачка про строки и слова - C++
Ошибочка закралась: суть задачки надо прочитать файл и вывести слова которые начинаются и кончаются на &quot;a&quot; (ну вот вбил я в свой файл для...

Задачка про кривые Безье - C++
Нужны советы (скорее алгоритмические) по одной задаче. Даны опорные точки кривой Безье, начальный и конечный параметры t0 и t1(0&lt;t&lt;1), а...

Задачка про Барона Мюнхгаузена - C++
Барон Мюнхаузен, выйдя на экологически чистую охоту, зарядил свое ружье косточками вишен. После того как он удачно попал между рога оленям,...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
03.10.2015, 20:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru