Вот все подсказки, которые вам нужны.Вы пытаетесь вычислить (n*(n-1))/2
давайте работать с недопустимым , но функциональным решением для печати первого набора чисел.
for (int n = 0; n < 20; n++)
{
std::cout << "n_choose_2(" << n << "): " << (n * (n-1)) / 2 << std::endl;
}
Конечно, выне может представить это, потому что он использует запрещенную математическую операцию.Но давайте посмотрим, что он печатает:
n_choose_2(0): 0
n_choose_2(1): 0
n_choose_2(2): 1
n_choose_2(3): 3
n_choose_2(4): 6
n_choose_2(5): 10
n_choose_2(6): 15
n_choose_2(7): 21
n_choose_2(8): 28
n_choose_2(9): 36
n_choose_2(10): 45
n_choose_2(11): 55
n_choose_2(12): 66
n_choose_2(13): 78
n_choose_2(14): 91
n_choose_2(15): 105
n_choose_2(16): 120
n_choose_2(17): 136
n_choose_2(18): 153
n_choose_2(19): 171
Теперь посмотрим, на какую величину увеличивается каждая строка.
Возьмите любые две соседние строки (кроме первой пары) и вычтите разницу.Например, n_choose_2(10)
- 45, а n_choose_2(9)
- 36. n_choose_2(10) - n_choose_2(9) == 9
.
n_choose_2(19) - n_choose_2(18)
- это то же самое, что и 171 - 153
, то есть 18
.
Обратите внимание на шаблон?
Вот все, что вам нужно:
unsigned int n_choose_2(unsigned int n)
{
if (n <= 1)
{
return 0;
}
// WHAT COMES NEXT IS UP TO YOU....
}