Даны два четных числа, найдите сумму квадратов всех четных чисел между ними. - PullRequest
1 голос
/ 10 июля 2020

Моя задача - создать программу, которая будет подсказывать пользователю два четных ints, finput и sinput. После этого он должен вывести сумму квадратов всех четных чисел от finput до sinput включительно.

Вот мой код, который пытается выполнить sh это:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int finput, sinput;
    int evens, d;

    cout << "Please enter an EVEN number for your first input.(Make sure your first input is less than your second): " << endl;
    cin >> finput;
    cout << "Please enter an EVEN number for your second input.(Make sure your first input is less than your second): " << endl;
    cin >> sinput;
    cout << "Results: " << endl << "---------------------------------------------------" << endl;


    if (finput % 2 == 0 && sinput % 2 == 0) {
        if (finput < sinput) {
            while (finput < sinput) {
                evens = pow(2, finput);
                finput += 2;
            }
        }
    }
    else {
        cout << "These numbers are not even. try again.";
        cout << endl << "Please enter two EVEN numbers. Your first input should be less than your second input (ex. 3  9; 50  100): " << endl;
        while (finput % 2 != 0 && sinput % 2 != 0) {
            cin >> finput >> sinput;
        }
    }
}

Я считаю, что мне нужно как-то хранить каждое приращение l oop, чтобы я мог добавить его к промежуточной сумме, но я понятия не имею, как это сделать. Может кто подскажет, как выполнить задачу?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Вы можете использовать от for-loop до l oop для всех чисел от finput до sinput. Обязательно увеличивайте на 2 каждый раз, чтобы получить все четные числа от finput до sinput.

int sum = 0;
for(int i = finput; i <= sinput; i += 2){
    sum += i*i;
}

Существует также способ O(1) для получения суммы всех четных квадратов между finput и sinput. Вы можете добиться этого с помощью формулы 1^2 + 2^2 + ... + n^2 = (n)(n+1)(2n+1)/6:

int sum = 4*(sinput/2)*(sinput/2+1)*(sinput+1)/6
        - 4*(finput/2)*(finput/2+1)*(finput+1)/6 + finput*finput;
0 голосов
/ 10 июля 2020

Здесь есть пара проблем:

evens = pow(2, finput);

Во-первых, вы не добавляете квадрат к окончательному результату. Во-вторых, вы вычисляете 2^finput вместо finput^2. Это должно быть:

evens += pow(finput, 2);

или

evens += finput * finput;

Кроме того, вам необходимо инициализировать аккумулятор до 0:

int evens = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...