C ++ упражнения - тип алгоритма - PullRequest
0 голосов
/ 05 апреля 2020

Дано N пар чисел. Выведите сумму каждой пары.

Первая строка стандартного ввода - N (1≤N≤100000). Следующие N строк содержат ровно два целых числа, разделенных пробелом, абсолютные значения которого меньше 1 000 000 000.

ВХОД

2
1 1
-1 0

ВЫХОД:

2
-1

Я написал это:

#include<iostream>
using namespace std;

int main()
{
  unsigned short int n;
  long int n2,n3, rez;
  rez=0;


  //Uneseno broj linija:
  cin>>n;

  for(int i=0;i<n;i++)
  {
    if(rez==0)
    {
    cin>>n2>>n3;
    rez=n2+n3;
    cout<<rez<<endl;
    }
    rez=0;
  }


return 0;
}

Теперь это было бы прекрасно, но я не получаю требуемый вывод. Я не могу думать о другой идее, потому что я не знаю, сколько именно N будет там, поэтому я не могу предсказать количество переменных, которые я должен создать, которые будут хранить результат двух введенных чисел.

Ответы [ 2 ]

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

Ваша программа почти работает. Все, что вам нужно сделать, это сделать n больше. unsigned short ограничено на 65 535. Увеличьте его до unsigned int, чтобы он мог обрабатывать значения до 100 000.

Кроме этого, переменная rez не нужна. Вы можете удалить его.

Кроме того, нет необходимости сначала сохранять все числа, а затем вычислять суммы. Вычисление их как вы go будет работать просто отлично. cin и cout являются независимыми потоками данных, и можно чередовать операции чтения и записи. Старайтесь не хранить их в векторе или массиве, поскольку они просто бесполезно жуют много памяти.

#include <iostream>

int main()
{
  unsigned n;
  std::cin >> n;

  for (unsigned i = 0; i < n; i++)
  {
    long n2, n3;
    std::cin >> n2 >> n3;
    std::cout << (n2 + n3) << std::endl;
  }

  return 0;
}

Примечания по стилю:

  • Избегайте using namespace std; . Лучше выписать std:: везде.
  • Я переместил n2 и n3 внутрь l oop. Попытайтесь объявить переменные как можно позже, чтобы ограничить их область видимости, а не объявлять их все в верхней части функции. Это делает очевидным, что они используются только внутри l oop и что их значения не сохраняются в течение итераций.
  • Добавьте пробелы вокруг операторов. Трудно читать все вместе.
0 голосов
/ 05 апреля 2020

Я изменил некоторые из числительных c типов, которые вы использовали. Это работает?

int main()
{
    vector<long long int> results;
    unsigned long int n;
    long long int n2, n3, rez;

    cin >> n;

    for (unsigned long int i = 0; i < n; i++)
    {
        cin >> n2 >> n3;
        rez = n2 + n3;
        results.push_back(rez);
        rez = 0;
    }

    for (auto result: results)
    {
        cout << result << endl;
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...