Сравнение сумм четных и нечетных чисел

Программа должна сравнивать сумму четных и нечетных чисел , но всегда выдает нечетное.

#include "stdio.h"

int main() {
    int n, i, s1 = 0, s2 = 0;
    int arr[100] = {};
    printf("how many numbers? : ");
    scanf("%i", &n);

    puts("\nenter values");

    for (i = 0; i < n; i++) {
       printf("%i = ", i + 1);
       scanf("%i", &arr[i]);
    }
    if (i % 2 == 0)
        s1 += arr[i];

    if (i % 2 != 0)
        s2 += arr[i];

    if (s1 > s2) {
        printf("сумма четных больше");
    }else{
        printf("сумма нечетных больше");
    }



}

Ответы (2 шт):

Автор решения: Harry

Вот это

for (i = 0; i < n; i++) {
   printf("%i = ", i + 1);
   scanf("%i", &arr[i]);
}
if (i % 2 == 0)
    s1 += arr[i];

if (i % 2 != 0)
    s2 += arr[i];

должно быть

for (i = 0; i < n; i++) {
   printf("%i = ", i + 1);
   scanf("%i", &arr[i]);

    if (arr[i] % 2)
        s2 += arr[i];
    else 
        s1 += arr[i];
}

Во-первых, вы должны проверять каждое число, во-вторых, проверять не индекс, а сами числа (мы же говорим о четных и нечетных числах, а не о числах, стоящих на четных и нечетных местах? я правильно понимаю? )

Можно обойтись совсем без массива:

int main()
{
    int n, s1 = 0, s2 = 0;
    printf("how many numbers? : ");
    scanf("%i", &n);
    puts("\nenter values");

    for (int i = 0, a; i < n; i++)
    {
        printf("%i = ", i + 1);
        scanf("%i", &a);
        *((a%2) ? &s2 : &s1) += a;
    }
    printf("сумма %sчетных больше",(s2 > s1) ? "не" : "");
}
→ Ссылка
Автор решения: Maxim Timakov

Данный код содержит несколько ошибок:

  • Во первых, суммировать нужно в цикле.
  • Во вторых, Вы проверяете на четность индекс в массиве, а нужно элемент массива.
  • В третьих, достаточно одной проверки на четность.
  • В четвертых, код содержит выход за границу введенных данных.
→ Ссылка