Тривиальным подходом может быть просто итерация от нуля до целевого числа и проверка, является ли каждое число нечетным или четным:
int sum = 0;
int count = 0;
for (int i = 0; i <= value; i++) {
if (i % 2 != 0) {
sum += i;
count++;
}
}
int avg = sum / count;
Но это, конечно, неэффективно.Немного лучшим подходом было бы начать с первого нечетного числа, 1
, и увеличивать его на 2
в каждой итерации, поэтому вы будете перебирать только нечетные числа:
double sum = 0;
int count = 0;
for (int i = 1; i <= value; i += 2) {
sum += i;
count++;
}
int avg = sum / count;
Или, если вы хотите быть действительно математически обоснованным, вы можете использовать тот факт, что нечетные натуральные числа в данном диапазоне распределены равномерно.Поскольку это распределение симметрично, среднее значение равно среднему, и вам вообще не нужен цикл:
int start = 1;
int end = value;
if (value % 2 == 0) {
value--;
}
int avg = (end + start) / 2;
Общий комментарий: в данном конкретном случае среднее значение будет равно int
, поэтому яиспользовал int
s во всех моих примерах.В общем случае вы, вероятно, должны использовать double
s, чтобы избежать ошибок при использовании целочисленного деления.