Текст задачи:
1. По каналу связи передаются положительные целые числа, не превышающие 1000 – результаты измерений, полученных в
ходе эксперимента (количество измерений N известно заранее, гарантируется, что N > 2). После окончания эксперимента передаётся
контрольное значение – наименьшее число R, удовлетворяющее следующим условиям.
1. R – сумма двух различных переданных элементов последовательности («различные» означает, что нельзя просто удваивать
переданные числа, суммы различных, но равных по величине элементов допускаются).
2. R кратно 3.
3. Если в последовательности нет двух чисел, сумма которых кратна 3, контрольное значение считается равным 1.
В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.
Напишите эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка
программирования, например, Free Pascal 2.6.4), которая будет проверять правильность контрольного значения.
Программа должна напечатать отчёт по следующей форме:
Вычисленное контрольное значение: …
Контроль пройден (или Контроль не пройден)
Код:
#include <iostream>
#include <fstream>
using namespace std;
ifstream v_1("1.txt");
int main()
{
system("chcp 1251 > nul");
int N, min = INT_MAX, r;
cout << "Введите количество чисел: " << endl;
cin >> N;
int* a = new int[N];
for (int i = 0; i < N; i++)
{
v_1 >> a[i];
}
for (int i = 0; i < N; i++)
{
for (int j = i + 1; j < N; j++)
{
if ((a[i] + a[j]) % 3 == 0)
{
if ((a[i] + a[j]) < min) min = a[i] + a[j];
}
}
}
if (min == INT_MAX)
cout << "Вычисленное контрольное значение: 1" << endl << "Контроль не пройден";
else if (min != a[N])
cout << "Вычисленное контрольное значение: " << min << endl << "Контроль не пройден";
else if (min == a[N])
cout << "Вычисленное контрольное значение : " << min << endl << "Контроль пройден";
}
Входные данные:
6
100
8
33
145
19
84
27
P.S.
Все число помимо количества чисел(6) я засунул в текстовый файл.
C/C++
Помогите найти ошибку в коде
int* a = new int[N]; // элементы будут с номерами от 0 до N-1
а в конце программы что-то сравниваешь с a[N] - откуда оно возьмётся?
а в конце программы что-то сравниваешь с a[N] - откуда оно возьмётся?
Граф применил чертову математику!
Чтобы пара делилась на три, есть два варианта:
оба числа кратны трем
остаток деления на три одного числа = 1, другого 2.
Поэтому достаточно из всего массива рассовать подходящие по этому критерию числа в две пары (Граф любит троицу поэтому у него три).
PS: но я бы хрен догадался)
Чтобы пара делилась на три, есть два варианта:
оба числа кратны трем
остаток деления на три одного числа = 1, другого 2.
Поэтому достаточно из всего массива рассовать подходящие по этому критерию числа в две пары (Граф любит троицу поэтому у него три).
PS: но я бы хрен догадался)
inline int& max(pair& a)
{
return a.first > a.second ? a.first : a.second;
}
inline int sum(pair& a)
{
return a.first + a.second;
}
int find_R(vector vec)
{
pair _3_0 = {50000,50000};
pair _2_1 = {50000,50000};
for (auto& i : vec)
{
switch(i%3)
{
case 0: if (max(_3_0) > i) max(_3_0) = i; break;
case 1: if (_2_1.second > i) _2_1.second = i; break;
case 2: if (_2_1.first > i) _2_1.first = i; break;
}
}
if (sum(_2_1) < sum(_3_0) && sum(_2_1) < 50000) return sum(_2_1);
else if (sum(_3_0) < 50000) return sum(_3_0); else return 1;
}
Опять квадрат(
И ты создаешь массив на N элементов, а в конце обращаешься к (N + 1)'ому.
Держи O(N):
И ты создаешь массив на N элементов, а в конце обращаешься к (N + 1)'ому.
Держи O(N):
#include
#include
using namespace std;
int findR(vector &v, int N) {
vector d(3, {1e5, 1e5});
for (int i = 0; i < N; i++) {
if (v[i] < d[v[i] % 3].first) {
d[v[i] % 3].second = d[v[i] % 3].first;
d[v[i] % 3].first = v[i];
} else if (v[i] < d[v[i] % 3].second)
d[v[i] % 3].second = v[i];
}
int res = 1e7;
if(d[0].first < 1e5 && d[0].second < 1e5) res = d[0].first + d[0].second;
if(d[1].first < 1e5 && d[2].first < 1e5) res = min(res, d[1].first + d[2].first);
return (res < 1e7 ? res : 1);
}
int main() {
freopen("input.txt", "r", stdin);
int n;
cin >> n;
vector a(n + 1);
for(auto &i: a)
cin >> i;
int r = findR(a, n);
cout
Оренбургский Красный Крест
уважаемо...
றÅ¥ ฟỐ╚F_Ῥ .ℱ.
сильно...
றÅ¥ ฟỐ╚F_Ῥ .ℱ.
Пойду дворником работать...
Похожие вопросы
- Помогите найти ошибку в коде
- Помогите найти ошибки в коде на C++, не выводится последняя строчка
- С++. Помогите найти ошибку в коде.
- Помогите найти ошибку в коде!!!
- Помогите найти ошибки в коде c++
- Помогите найти ошибку в коде
- Помогите найти ошибку.Где ошибка в коде не могу найти язык СИ
- Помогите с информатикой. не могу найти ошибку в коде
- Помогите исправить ошибку в коде, смотри внутри.
- С++ Win32 Api Помогите найти ошибку.