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

C4 ЕГЭ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
slboss
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 9
29.05.2013, 12:44     C4 ЕГЭ #1
Нужно решить С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
Контроль пройден
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 12:44     C4 ЕГЭ
Посмотрите здесь:

ЕГЭ Информатика С2 C++
ЕГЭ Информатика С2 (Массивы) C++
ЕГЭ Информатика С2 C++
C++ ЕГЭ Информатика С4
C++ ЕГЭ Информатика
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WayThis
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
29.05.2013, 19:42     C4 ЕГЭ #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.
slboss
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 9
29.05.2013, 19:50  [ТС]     C4 ЕГЭ #3
Благодарю
WayThis
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
29.05.2013, 22:29     C4 ЕГЭ #4
Цитата Сообщение от slboss Посмотреть сообщение
Благодарю
Это, правда, немного не с++, но, я думаю, ход моих мыслей понятен)
Moreman32
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 19
29.05.2013, 22:37     C4 ЕГЭ #5
За это максимум 2 балла из 4... Нужно написать без цикла в цикле...
slboss
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 9
29.05.2013, 22:59  [ТС]     C4 ЕГЭ #6
Ход конечно понятен )
Паскаль я тоже знаю
Мне главное понять решение
ЕГЭ завтра ведь по информатике )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 23:38     C4 ЕГЭ
Еще ссылки по теме:

задача с4 егэ :( C++
C++ Кодировка в консоли (на ЕГЭ)
С++ Одна из задач ЕгЭ С4 C++

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
29.05.2013, 23:38     C4 ЕГЭ #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;
}
Yandex
Объявления
29.05.2013, 23:38     C4 ЕГЭ
Ответ Создать тему
Опции темы

Текущее время: 17:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru