Как мы рассматриваем ограничения для переменных в этой задаче? - PullRequest
0 голосов
/ 07 апреля 2020

Вопрос: Считайте 3 числа из стандартного ввода и выведите их сумму в стандартный вывод. Ограничения: 1 <= a, b, c = <1000. </strong>

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int sum = 0;
    int x, y, z;

    cin >> x >> y >> z;
    sum = x + y + z;
    cout << sum << endl;
    return 0;
}

Это работает, но как работает 1 <= a, b, c = <1000 позаботились о? </strong>

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

Вопрос в том, что «ни один вход не будет меньше 1 или больше 1000».

Вы выбираете свои типы соответственно. Например, максимальная сумма составляет 1000 + 1000 + 1000, поэтому, если ваш тип (int) может хранить это значение на вашей платформе, значит, вы золотой.

Это также может означать, что вы можете выбрать для go проверки или тестирования значений за пределами этого диапазона, хотя вам следует проконсультироваться с инструктором об этом, если это не ясно. Несмотря на это, вы все равно можете sh выполнить эту проверку, чтобы проверить , что ограничения соблюдаются тем, кто передает данные. Как правило, стоит ли это делать, зависит от ситуации. Для образования кажется вероятным, что данные ограничения означают «вам не нужно беспокоиться об этом». Возможно, в будущем задание будет включать неограниченные входные данные.

0 голосов
/ 07 апреля 2020

Вы можете добавить наивную проверку в свой код, контролируя, принадлежит ли каждое входное значение к интервалу [1,1000], и предлагая вставить правильные значения в случае неудачной проверки:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int sum = 0;
    int x, y, z;

    cin >> x >> y >> z;
    while(x<1 || x>1000 || y<1 || y>1000 || z<1 || z>1000){
       cout << "Error: each input value must belong to [1,1000]!" << endl;
       cin >> x >> y >> z;
    }
    sum = x + y + z;
    cout << "The sum is " << sum << endl;
    return 0;
}

Может быть, вы вместо этого main хочу вернуть код ошибки, когда ввод не находится в заданном интервале:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int sum = 0;
    int x, y, z;

    cin >> x >> y >> z;
    if(x<1 || x>1000 || y<1 || y>1000 || z<1 || z>1000){
       cout << "Error: each input value must belong to [1,1000]. Abort." << endl;
       return -1;
    }
    sum = x + y + z;
    cout << "The sum is " << sum << endl;
    return 0;
}

Я предлагаю вставить инструкцию с инструкцией в начале, что-то вроде

cout << "Insert 3 values belonging to [1,1000]" << endl;
0 голосов
/ 07 апреля 2020

Тот факт, что вы объявляете тип данных x, y и z как int, гарантирует, что диапазон значений будет находиться в диапазоне от -2147483648 до 2147483647, что является диапазоном значений по умолчанию для int (4 байта) в C ++.

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