Сумма всех целых чисел, которые делятся на 4 и 6 между первым и вторым числом

Мне нужно написать программу, которая будет получать 2 целых числа. Затем программа отобразит сумму всех целых чисел, которые делятся на 4 и 6 между двумя числами.

Я попытался сделать код ниже:

#include <iostream>
using namespace std;

int main()
{
    int num1, num2, sum=0;

    cout << "Input first number : ";
    cin >> num1;
    cout << "Input second number : ";
    cin >> num2;


    for(int i = num1 + 1;i<num2;i++)
    {
        if ( num1 % 4 == 0 && num2 % 6 == 0)
        {
            sum = sum + i;
        }
    }
    cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
    system("pause");
    return 0;
}

Мой ожидаемый результат должен быть

Введите первое число: 4
Введите второе число: 12
Сумма всех целых чисел, которые делятся на 4 и 6 между 4 и 12, равна 12. "поскольку 12 - единственное число, которое делится и на 4, и на 6"

Но реальные результаты
Введите первое число: 4
Введите второе число: 12
Сумма всех целых чисел, которые делятся на 4 и 6 между 4 и 12, равна 56.

Думаю, вы хотите проверить, делится ли i на 4 и 6, тогда как сейчас вы проверяете, делятся ли num1 и num2 соответственно. Кроме того, если вы хотите проверить между num1 и num2 включительно, вам нужно тщательно изучить начало цикла for.

jjh 09.04.2019 12:20

Подсказка: число делится и на 4, и на 6, если оно делится на 12...

Aconcagua 09.04.2019 12:20

Благодарим вас за отправку вопроса на StackOverflow! Пожалуйста, включите достаточный код (включая операторы #include), чтобы участник мог скомпилировать ваш код, просто вырезав и вставив его.

Gardener 09.04.2019 12:21

О используя пространство имен std...

Aconcagua 09.04.2019 12:27

Боковое примечание: задача консольного приложения не состоит в том, чтобы держать консоль открытой. Это только предотвращает использование программы в сценарии (где нет тела для нажатия клавиши...). Поэтому вам не следует делать такие вещи, как system("pause"), getchar() или getch() (из conio.h). Вместо этого сначала откройте консоль (cmd.exe), перейдите к своей программе и запустите ее из консоли...

Aconcagua 09.04.2019 14:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
79
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вот правильная программа:

#include <iostream>
using namespace std;

int main()
{
    int num1, num2, sum=0;

    cout << "Input first number : ";
    cin >> num1;
    cout << "Input second number : ";
    cin >> num2;


    for(int i = num1;i<=num2;i++) // if you want to include num1 and num2
    //for(int i = num1+1;i<num2;i++) // if you do not want to include num1 and num2
    {
        if ( i % 4 == 0 && i % 6 == 0)
        {
            sum = sum + i;

        }
    }
    cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
    system("pause");
    return 0;
}

Я бы предположил, что нижняя граница тоже должна быть проверена (так что нет + 1 тогда...).

Aconcagua 09.04.2019 12:37

Условие в if ( num1 % 4 == 0 && num2 % 6 == 0 ) неверно.

Вам нужно изменить его на: -

(i % 4 == 0 && i % 6 == 0)

Как уже говорилось, вам нужна только проверка на делимость на 12, и вам нужно использовать i в качестве проверки в условном выражении. В моей системе нет pause(), поэтому вы можете просто использовать другой вызов cin >> для создания паузы. Конечно, тогда вы должны ввести букву/цифру. Недостаточно места.

#include <iostream>
using namespace std;

int main()
{
  int num1, num2, sum=0;
  int wait_var;

  cout << "Input first number : ";
  cin >> num1;
  cout << "Input second number : ";
  cin >> num2;


  for(int i = num1 + 1;i<num2;i++) // bounds are correct
  {
    if ( i % 12 == 0) // check for divisibility by 12 of i, not of the num1 and num2
    {
      sum = sum + i;
    }
  }
  cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
  cin >> wait_var;
  return 0;
}
Ответ принят как подходящий

Есть две проблемы:

Сначала, поскольку 4 и 12, используемые в качестве границ, должны давать 12, а не 0, вам также необходимо включить границы в свой цикл:

for(int i = num1; i <= num2; i++)
//                   ^ (!)
//             ^ - 1 dropped

Тогда ваше условие для выбора слагаемых неверно:

if (num1 % 4 == 0 && num2 % 6 == 0)

Имейте в виду, что это всегда верно для num1 == 4 и num2 == 12, поэтому вы суммируете числа все между ними... На самом деле вам нужно проверить переменную, находящуюся между этими двумя границами, а именно i:

if (i % 4 == 0 && i % 6 == 0) // i will be 4, 5, ... , 11, 12 (with above fixed loop)

Кроме того, мы можем сделать его немного короче: число делится и на 4, и на 6, если оно делится на 12. Таким образом, ваш чек может выглядеть просто так:

if (i % 12 == 0)

Другие вопросы по теме