Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как решить следующую задачу (Diverse Deputation)? (https://javascript.ru/forum/dom-window/77681-kak-reshit-sleduyushhuyu-zadachu-diverse-deputation.html)

gsdev99 06.06.2019 19:21

Как решить следующую задачу (Diverse Deputation)?
 
Всем привет. Недавно увидел такую задачу. Но возникли сложности с решением. Был бы благодарен вашей помощи.

There are m men and w women. A deputation of exactly 3 people has to be formed from them. A deputation is diverse if and only if it contains at least one man and at least one woman. How many distinct ways are there to select a diverse deputation of 3 people? Two deputations are different if and only if one deputation has a member which the other does not have.
Find the number of ways to select a diverse deputation of 3 people.

Function Description
Complete the function diverseDeputation in the editor below. The function must return an integer which is the number of ways to select a diverse deputation from m men and w women.


Constraints
0 ≤ m, w ≤ 1000


/*
* Complete the 'diverseDeputation' function below.
*
* The function is expected to return an INTEGER.
* The function accepts following parameters:
* 1. INTEGER m
* 2. INTEGER w
*/

function diverseDeputation(m, w) {
// Write your code here
}

Alexandroppolus 07.06.2019 06:06

return m*(m-1)*w/2 + w*(w-1)*m/2;

gsdev99 07.06.2019 09:41

Большое спасибо. А вы могли бы кратко объяснить?

Alexandroppolus 07.06.2019 10:02

Есть два вида делегации: либо ммж, либо мжж. В первом случае есть m(m-1)/2 вариантов выбрать двух чуваков и w вариантов выбрать телочку. Во втором наоборот. Вот так и получается. Основы комбинаторики.

рони 07.06.2019 10:56

Alexandroppolus,
а почему не так?
m*(m-1)*w + (w - 1)*(w - 2)*(m-2);

Alexandroppolus 07.06.2019 15:35

рони,
Не совсем понял, как такая формула возникла.

рони 07.06.2019 15:45

Alexandroppolus,
немного другой вариант
m*(m-1) * w/2 + (w - 1)*(w - 2)* (m-2)/2;

Dilettante_Pro 07.06.2019 15:52

Проверяем по минимальному набору
var m = 3, w = 3;
console.log(m*(m-1)*w/2 + w*(w-1)*m/2);
console.log(m*(m-1) * w/2 + (w - 1)*(w - 2)* (m-2)/2);

var d = [["M1","M2","M3"],["W1","W2","W3"]];
var del = [], k=0;

for(var i = 0;i < 2;i++) {
    for(var j = i + 1;j<3;j++){
        for(var l = 0; l < 3; l++) {
           del[k] = d[0][i]  + d[0][j] + d[1][l];
           console.log(del[k]);
           k++;
        }
    }
}
for(var i = 0;i < 2;i++) {
    for(var j = i + 1;j<3;j++){
        for(var l = 0; l < 3; l++) {
           del[k] = d[1][i]  + d[1][j] + d[0][l];
           console.log(del[k]);
           k++;
        }
    }
}
console.log(k);

рони 07.06.2019 16:07

Dilettante_Pro,
Alexandroppolus,
скорее всего я не понял условия задачи.
думалось про что то такое ...
M1M2W1
W2W3M3
2 варианта если m = 3, w = 3;
в комбинациях нет общих элементов

Malleys 07.06.2019 16:37

Сколькими способами можно расставить 2 женщин и 1 мужчину, или 1 женщину и 2 мужчин? Это задача на перестановки. Ответ: m × (m − 1) × w + w × (w − 1) × m

Сколькими способами можно выбрать 2 женщин и 1 мужчину, или 1 женщину и 2 мужчин? Это задача на сочетания. Ответ: m × (m − 1) ÷ 2 × w + w × (w − 1) ÷ 2 × m

Цитата:

Сообщение от Alexandroppolus
Не совсем понял, как такая формула возникла.

Удивительнейшии Alexandroppolus — человек, написавший сочетания, не понял перестановки...

Цитата:

Сообщение от рони
а почему не так?
m*(m-1)*w + (w - 1)*(w - 2)*(m-2);

Это ответ на вопрос: Сколькими способами можно расставить людей в 2 группах, чтобы сначала была составлена группа из 1 женщины и 2 мужчин, а из оставшихся составлена группа из 2 женщин и 1 мужчины?

Цитата:

Сообщение от рони
немного другой вариант
m*(m-1) * w/2 + (w - 1)*(w - 2)* (m-2)/2;

Это ответ на вопрос: Сколькими способами можно выбрать людей для того, чтобы составить 2 группы, чтобы сначала была составлена группа из 1 женщины и 2 мужчин, а из оставшихся составлена группа из 2 женщин и 1 мужчины?


Часовой пояс GMT +3, время: 22:08.