Первая Задачка. Подскажите.

Тема в разделе "C/C++/C#", создана пользователем stasss, 18 ноя 2012.

  1. stasss

    stasss Гость

    Здраствуйте! Учу С++, и нужно решить задачку. Даны целые положительные числа N, a1..., aN. Используя только простые арифметические операции, найти сумму нечетных и произведение четных членов последовательности. Решение понятно, найти четные-нечетные через %2, зациклить суммирование нечетных и произведение четных. Но стал вопрос, как не используя массив работать с N-ным количеством чисел? Спасибо тем кто откликнется!
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    cin >> n;
    for (p = 1, s = 0; 0 > n;) {
    cin >> t;
    if (1 & t) s += t;
    else p *= t;
    }
     
  3. stasss

    stasss Гость

    Спасибо! Попробую написать все и покажу, для проверки, что из этого выйдет.
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    куда-то надо --n добавить
     
  5. stasss

    stasss Гость

    Вот собственно до чего дошел

    {int a=0,N=9,/*переменная N может меняться, в зависимости от величины последовательности. В данном примере будут вводиться цифры до 9*/
    chet=1,
    nechet=0;
    {for(a=1;a<=N;a++)
    {scanf("%d",&a);
    if(a%2==0)
    {chet*=a;}
    if(a%2>0);
    {nechet+=a;}
    }

    НО. Выдает нереальные числа чет и нечет. По моему ошибка в условии цикла. Не могу додуматься...
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    дошли до полнейшей ерунды.
    фигурные скобочки в Си просто так не ставятся, точки с запятыми тоже.
    почему мой код не использовали?
     
  7. stasss

    stasss Гость

    Напомню, это моя первая самостоятельная задача ). Сильно не бейте. Почему не воспользовался? Я поменял имена переменных, и условия цикла. Так как с 0>N, у Вас, я не понял как он будет выполняться. Ведь N>0 в моем случае. А арифметику оставил. И что значит if (1 & t) почему не if(a%2>0) ?
     
  8. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (C++):
    #include <iostream>
    int main() {
    int n, t, p, s;
    std::cin >> n;
    for (p = 1, s = 0; 0 < n; --n) {
    std::cin >> t;
    if (1 & t) s += t;
    else p *= t;
    }
    std::cout << s << " " << p;
    std::cin.get(), std::cin.get();
    return 0;
    }
    верно :mellow:

    потому что % - это более сложная операция чем &

    Добавлено: по твоему коду:
    Код (C++):
    {for(a=1;a<=N;a++)
    фигурные скобочки просто так не ставятся, почитай зачем они нужны.

    Код (Text):
    if(a%2==0)
    {chet*=a;}
    if(a%2>0);
    второе условие замени на else. Вычислять выражения a%2 лишний раз не стоит, от этого программа не будет быстрее работать. Кроме того, возможны трудноуловимые баги, если в первом условии значение a изменится (это не к вашей программе, но такое бывает, вцелом, часто)

    Код (Text):
    if(a%2>0);
    про точки с запятой я уже тоже писал, из за нее строка
    Код (Text):
    {nechet+=a;}
    выполняется на каждой итерации цикла.
     
  9. stasss

    stasss Гость


    Спасибо за подробное разъяснение. Тоесть в { } содержится тело цикла со всеми операциями. А насчет (1 & t) я даже и не знал.


    Добавлено:

    Спасибо за подробное разъяснение. Тоесть в { } содержится тело цикла со всеми операциями. А насчет (1 & t) я даже и не знал.
     
  10. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    фигурные скобки ограничивают область видимости и иногда их можно для этого поставить без циклом, условий и т.п., но это не ваш случай
     
Загрузка...
Похожие Темы - Первая Задачка Подскажите
  1. 1ive
    Ответов:
    4
    Просмотров:
    2.420
  2. ToxaRat
    Ответов:
    8
    Просмотров:
    3.385
  3. Hehabr
    Ответов:
    1
    Просмотров:
    487
  4. dmalsh
    Ответов:
    1
    Просмотров:
    1.009
  5. varenbko
    Ответов:
    0
    Просмотров:
    1.040

Поделиться этой страницей