• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Сколько раз выполняется if?

  • Автор темы arthas65536
  • Дата начала
A

arthas65536

Здравствуйте, помогите понять сколько раз выполняется вложенный if
Код функции ниже.
У меня получается, что он выполняется N(N-1)(N-2) раз
Но в книге написано N(N-1)(N-2)/6
Не могу понять от куда здесь /6???


Код:

Код:
public static int count(int[] a) {
       int n = a.length;
       int count = 0;
       for (int i = 0; i < n; i++) {
           for (int j = i+1; j < n; j++) {
               for (int k = j+1; k < n; k++) {
                   if (a + a[j] + a[k] == 0) {
                       count++;
                   }
               }
           }
       }
       return count;
   }
 

sinner67

Green Team
24.03.2017
279
358
BIT
0
Проверил на код в таком виде:
Код:
#include <iostream>
using namespace std;
int main()
{
    int a[7] ={0,0,0,0,0,0,0};
    int n = 7;
    int count = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            for (int k = j+1; k < n; k++) {
                if (a[i] + a[j] + a[k] == 0) {
                      count++;
                }
            }
        }
    }
    
    cout << count << endl;
    
    return 0;
}
У меня всегда получалось N*(N-1)*(N-2)/6. Не могу понять как у вас могло по другому получится.
 
A

arthas65536

Проверил на код в таком виде:
Код:
#include <iostream>
using namespace std;
int main()
{
    int a[7] ={0,0,0,0,0,0,0};
    int n = 7;
    int count = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            for (int k = j+1; k < n; k++) {
                if (a[i] + a[j] + a[k] == 0) {
                      count++;
                }
            }
        }
    }
  
    cout << count << endl;
  
    return 0;
}
У меня всегда получалось N*(N-1)*(N-2)/6. Не могу понять как у вас могло по другому получится.

Я наверное не корректно сформулировал вопрос.
Меня интересует сколько раз за выполнение программы будет вызван if.
Мои рассуждения по этому поводу:
В третьем вложенном цикле If выполнится N-2 раз, а этот цикл будет выполняться N-1 раз, получается (N-1)(N-2) и еще первый цикл N раз.
Итого N(N-1)(N-2)
Но в книге стоит выражение N(N-1)(N-2)/6
И я не понимаю как берется эта 6.

Как вы подсчитали это выражение N*(N-1)*(N-2)/6
 
Последнее редактирование модератором:

sinner67

Green Team
24.03.2017
279
358
BIT
0
Как вы подсчитала это выражение N*(N-1)*(N-2)/6
Повышал размер массива и проверял результат.
Размер 3 - кол-во 1; (3*2*1)/6 = 1
Размер 4 - кол-во 4; (4*3*2)/6 = 4
Размер 5 - кол-во 10; (5*4*3)6 = 10
Размер 6 - кол-во 20; (6*5*4)/6 = 20
Размер 7 - кол-во 35; (7*6*5)/6 = 35

Или можно посчитать кол-во вариантов:
При N = 3;
0 1 2
0 2 3 - уже не выполняется
При N = 4;
0 1 2
0 1 3
0 2 3
0 3 4 - не выполняется
1 2 3
1 3 4 - не выполняется
2 3 4 - не выполняется
3 4 5 - не выполняется
И так далее
[doublepost=1509698083,1509694241][/doublepost]Что ты сделал ДЕМОН!!!! Я теперь не смогу успокоиться пока не найду формулу из комбинаторики для вычисления возможных комбинаций для этой задачи!!!
[doublepost=1509701685][/doublepost]Ну наконец то!!! Нашел: А(n,m) / P(m)
A - кол - во размещений n в m
P - кол - во перестановок из m
т.е. Находим кол - во сочетаний.
 
Последнее редактирование:
  • Нравится
Реакции: arthas65536
A

arthas65536

Ну наконец то!!! Нашел: А(n,m) / P(m)
A - кол - во размещений n в m
P - кол - во перестановок из m
т.е. Находим кол - во сочетаний.

Большое спасибо, а где можно про это почитать, у меня не получилось найти.
 

sinner67

Green Team
24.03.2017
279
358
BIT
0
Мне нравиться этот сайт
Там со всеми ссылками на нужные темы и вроде доходчиво объясняет.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!