Разобрать одну строку кода

163
16 апреля 2019, 11:20

Нужно разобрать строку sum += (i / 2) ? i : 0; как работает это условие и как его заменить через оператор if

Код:

#include "pch.h"
#include <iostream>
int main()
{
int n, sum = 0;
std::cin >> n;
for (int i = 2; i <= n; i = i +2)
{
    sum += (i / 2) ? i : 0;
}
std::cout << sum;
return (0);
}
Answer 1
sum += (i / 2) ? i : 0;

Прибавить к sum, если значение i/2 ненулевое, число i, в противном случае - 0:

if (i/2) sum += i;

(поскольку в ветви else ничего не меняется - ее просто отбрасываем...)

Только вот смысла в этом - никакого. Так как для вашего цикла i/2 всегда больше нуля - так что

for (int i = 2; i <= n; i = i +2)
{
    sum += (i / 2) ? i : 0;
}

С легкостью переписывается как

for (int i = 2; i <= n; i = i +2)
{
    sum += i;
}

Или еще проще, с учетом, что изначально sum равно 0:

sum = (n/2)*(1+n/2);
Answer 2

Вариант попроще:

if (i > 1) sum += i;

но поскольку цикл начинается с двойки, то можно условие вообще не проверять.

READ ALSO
Исключение std::bad_alloc для 2 элементов

Исключение std::bad_alloc для 2 элементов

Почему следующая программа выбрасывает исключение std::bad_alloc?

167
Как создать ветвление в std::vector?

Как создать ветвление в std::vector?

Я хочу создать вот такую

174
Java распарсить JSON с глубокой вложенностью

Java распарсить JSON с глубокой вложенностью

Нужно распарсить такой сложный JSON:

205
Как перемесить изображение?

Как перемесить изображение?

Нужно,что бы при выборе изображения оно перемещалось в корневую папку программы, как это можно реализовать ? Пытался через Filescopy и Files

180