Loading...
Filipbg avatar Filipbg 26 Точки

Task 1 Pipes

#include <iostream>
#include <cmath>
#include <array>
using namespace std;

int main()
{
    int numberOfPipes = 0;
    int lifetimes = 0;
    array<int, 100> checkup = {0};
    array<int, 100> installation = {0};
    cin >> numberOfPipes;
    if(numberOfPipes > 0 && numberOfPipes <= 500)
    {
        for(int i = 0; i < numberOfPipes; ++i)
        {
            cin >> checkup[i];
        }
        for(int n = 0; n < numberOfPipes; ++n)
        {
            cin >> installation[n];
        }
        if(installation.size() > 0 && installation.size() <= 500)
        {
            for(int i = 0; i < numberOfPipes; ++i)
            {
                if(checkup[i] < installation[i])
                {
                    lifetimes = abs(checkup[i] - installation[i]);
                }
                else
                {
                    lifetimes = installation[i];
                }
                cout << lifetimes << " ";
            }
        }
    }
    return 0;
}

От задачата разбирам че годините се намират като се извадят всички checkup от installation. Или бъркам логиката за изчисляването на годините?

Тагове:
0
C++ Fundamentals
MartinBG avatar MartinBG 4803 Точки
Best Answer

По условие се търси след колко години тръбата трябва да бъде заменена (0 - трябва да се смени веднага, 1 - след 1 година и т.н.). Годините се получават като се извади здравината от текущото (new) замерване от предходното (old) замерване - така получаваме стъпката на износване и с нея делим текущата здравина (new):

years = new  / (old new)

 

В решението ти има много ненужни проверки (проверяваш неща, които по условие са ти гарантирани) и това може би те обърква допълнително.

Следните валидации са излишни:

if(numberOfPipes > 0 && numberOfPipes <= 500)

if(installation.size() > 0 && installation.size() <= 500)

if(checkup[i] < installation[i])

 

0
Filipbg avatar Filipbg 26 Точки

Благодаря за отговора. Реших я но Judge даде 60/100 и 4 Runtime Errors. Нямам идея къде греша :/ 
EDIT: Промених масивите с големина 500 и мина. Явно това са имали в предвид в условието.

#include <iostream>
#include <cmath>
#include <array>
using namespace std;

int main()
{
int numberOfPipes = 0;
int lifetimes[] = {0};
array<int, 100> checkup = {0};
array<int, 100> installation = {0};
cin >> numberOfPipes;
for(int i = 0; i < numberOfPipes; ++i)
{
    cin >> checkup[i];
}
for(int n = 0; n < numberOfPipes; ++n)
{
    cin >> installation[n];
}
for(int i = 0; i < numberOfPipes; ++i)
{
lifetimes[i] = 1.0 * installation[i] / (checkup[i] - installation[i]);
cout << abs(lifetimes[i]) << " ";
}
return 0;
}

 

0
27/09/2019 18:17:22
MartinBG avatar MartinBG 4803 Точки

В случая по-удачно е да използваш vector вместо array, тъй като размерът му може да се променя динамично (т.е. по време на изпълнение на програмата), а не е фиксиран:

 

#include <iostream>
#include <vector>
using namespace std;

int main()
{
  int numberOfPipes;
  vector<int> checkup;
  vector<int> installation;
  cin >> numberOfPipes;
  int pipeStrength;
  for(int i = 0; i < numberOfPipes; ++i)
  {
    cin >> pipeStrength;
    checkup.push_back(pipeStrength);
  }
  for(int n = 0; n < numberOfPipes; ++n)
  {
    cin >> pipeStrength;
    installation.push_back(pipeStrength);
  }
  for(int i = 0; i < numberOfPipes; ++i)
  {
    int yearsLeft = installation[i] / (checkup[i] - installation[i]);
    cout << yearsLeft << " ";
  }
  return 0;
}

 

0
zzerro avatar zzerro 16 Точки

Здравейте!

Аз нещо не разбрах.. Следното работи:

void readArr(vector<int> &inArr)
{
    for(size_t i = 0; i < inArr.size(); ++i)
        cin >> inArr[i];
}

Обаче ето така не става:

void readArr(vector<int> &inArr)
{
    for(int i : inArr)
        cin >> inArr[i];
}

Защо?

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.