Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
slboss
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 9
#1

C4 ЕГЭ - C++

29.05.2013, 12:44. Просмотров 1422. Ответов 6
Метки нет (Все метки)

Нужно решить С4, прошу вашей помощи ))

По каналу связи передаётся последовательность положительных целых
чисел, все числа не превышают 1000. Количество чисел известно, но может
быть очень велико. Затем передаётся контрольное значение
последовательности - наибольшее число R, удовлетворяющее следующим
условиям:
1) R - произведение двух различных переданных элементов
последовательности («различные» означает, что не рассматриваются
квадраты переданных чисел, произведения различных элементов
последовательности, равных по величине, допускаются);
2) R делится на 22.
Если такого числа R нет, то контрольное значение полагается равным 0.
В результате помех при передаче как сами числа, так и контрольное значение
могут быть искажены.
Напишите эффективную, в том числе по используемой памяти, программу
(укажите используемую версию языка программирования, например, Borland
Pascal 7.0), которая будет проверять правильность контрольного значения.
Программа должна напечатать отчёт по следующей форме:
Вычисленное контрольное значение: ...
Контроль пройден (или- Контроль не пройден)
Перед текстом программы кратко опишите используемый Вами алгоритм
решения.
На вход программе в первой строке подаётся количество чисел N. В каждой
из последующих N строк записано одно натуральное число, не превышающее
1000. В последней строке записано контрольное значение.

Пример входных данных:
б
55
997
22
7
9
400
2 2 0 00
Пример выходных данных для приведённого выше примера входных данных:
Вычисленное контрольное значение: 22000
Контроль пройден
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 12:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос C4 ЕГЭ (C++):

ЕГЭ Информатика С2 - C++
Найти и вывести наименьший номер элемента массива, равного Х, или сообщение, что такого элемента нет. #include <iostream> using...

ЕГЭ Информатика - C++
На вход программы подаются прописные латинские буквы, ввод этих символов заканчивается точкой. Напишите эффективную по времени работы и по...

ЕГЭ Информатика С4 - C++
Задача: После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько баллов...

ЕГЭ Информатика С2 - C++
/*Опишите на русском языке или на одном из языков программирования алгоритм суммирования положительных элементов квадратной матрицы,...

Кодировка в консоли (на ЕГЭ) - C++
В этом году буду писать экзамен, но дело в том, что в visual studio setlocale(LC_ALL,"Rus"); не приводит ни к чему (знаю, что в самой...

С++ Одна из задач ЕгЭ С4 - C++
Задача С4 На вход в программе подаются сведения о студентах с 1-го по 5-й курс некоторого вуза. В первой строке сообщается количество...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
WayThis
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
29.05.2013, 19:42 #2
Насчет эффективности не уверен, но работает все стабильно.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program sifour;
uses crt;
var
a:array [1..1000] of integer;
control:longint;
i,j,max,n,vrem:longint;
begin
write('ВВЕДИТЕ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ПОСЛЕДОВАТЕЛЬНОСТИ: ');
REAdln(n);
for i:=1 to n do
readln(a[i]);
write('ВВЕДИТЕ КОНТРОЛЬНОЕ ЗНАЧЕНИЕ: ');
readln(control);
max:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if (a[i]*a[j]>max) and  (a[i]*a[j] mod 22 = 0) then max:=a[i]*a[j];
writeln('ВЫЧИСЛЕННОЕ КОНТРОЛЬНОЕ ЗНАЧЕНИЕ: ',MAX);
if max=control then
WRITELN('КОНТРОЛЬ ПРОЙДЕН')
else writeln('КОНТРОЛЬ НЕ ПРОЙДЕН');
end.
0
slboss
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 9
29.05.2013, 19:50  [ТС] #3
Благодарю
0
WayThis
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
29.05.2013, 22:29 #4
Цитата Сообщение от slboss Посмотреть сообщение
Благодарю
Это, правда, немного не с++, но, я думаю, ход моих мыслей понятен)
0
Moreman32
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 19
29.05.2013, 22:37 #5
За это максимум 2 балла из 4... Нужно написать без цикла в цикле...
0
slboss
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 9
29.05.2013, 22:59  [ТС] #6
Ход конечно понятен )
Паскаль я тоже знаю
Мне главное понять решение
ЕГЭ завтра ведь по информатике )
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
29.05.2013, 23:38 #7
Цитата Сообщение от slboss Посмотреть сообщение
Паскаль я тоже знаю
Мне главное понять решение
Дык, как же его понять, если ни С++, ни Паскаля...


Ну вот так в одном цикле.
Заводим две переменные, в которых храним первый и второй удовлетворяющий условиям максимумы.
По потоку идем и смотрим, если новое значение удовлетворяет условиям в сочетании с одним из максимумов, меняем значение первого или второго максимума на новое значение.

Мне лень возиться с файлами, поэтому я запилил потоковый рандом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <ctime>
#include <cstdlib>
 
#include <iostream>
 
// эта структура вообще не нужна.
struct RandomGenerator {
  RandomGenerator(int min, int max) : min(min), max(max) {}
  int operator()() const { return min + rand() % (max - min); }
  RandomGenerator &operator>>(int &v) {
    v = operator()();
    return *this;
  }
  int min, max;
};
 
int main(int , char**) {
  srand(time(0));
  
  // тут вместо RandomGenerator
  // нужно открывать файл на чтение
  RandomGenerator in(0, 1000);
 
  int firstMaximum = 0, secondMaximum = 0;
  if (firstMaximum < secondMaximum) {
    std::swap(firstMaximum, secondMaximum);
  }
  
  // вместо цикла for надо
  //while (!in.good()) {
  for (int i = 0; i < 88; ++i) {
    int value;
    in >> value;
    std::cout << value << std::endl;
 
    if (value > firstMaximum) {
      if (value * firstMaximum % 22 == 0) {
        secondMaximum = firstMaximum;
        firstMaximum = value;
      } else if (value * secondMaximum % 22 == 0) {
        firstMaximum = value;
      }
    } else if (value > secondMaximum && value < firstMaximum) {
      if (value * firstMaximum % 22 == 0) {
        secondMaximum = value;
      }
    }
  }
 
  int checkSum = firstMaximum * secondMaximum;
  if (firstMaximum == secondMaximum || checkSum % 22 != 0) checkSum = 0;
 
  std::cout << firstMaximum << "*" << secondMaximum << ", checksum = " << checkSum << std::endl;
 
  return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 23:38
Привет! Вот еще темы с ответами:

ЕГЭ Информатика С2 (Массивы) - C++
Здравствуйте, решаю задачи для подготовки к ЕГЭ,все вроде бы легко,но проблема в том, что все ответы на Паскале. Решал такую задачу,...

Массивы A+B=C (трудная задача из ЕГЭ) - C++
Два одномерных массива, состоящие из целых натуральных чисел, задаются с клавиатуры : массив A, длинной m и массив B, длинной n....

Можно ли в ЕГЭ в С части использовать STL - C++
всем привет, можно ли в части Ц, где нужно самому писать программу использовать контейнеры и алгоритмы из STL ?

Задание из ЕГЭ: поиск худших учеников - C++
Является ли моя программа эффективной по времени и по памяти? Что можно улучшить? Как можно было бы укоротить 26 строку? Задание: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.05.2013, 23:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru