| 
	
		
		
			| Решения задач С4 по информатике |  |  |  | 
| push23 | Дата: Суббота, 2013-04-20, 1:00 PM | Сообщение # 1 |  |   Студент Группа: Пользователи Сообщений: 67 Репутация: 25 Замечания: 0% Статус: Offline | Привет Всем! До ЕГЭ осталось не так много времени, а с С4 еще возникают проблемы, поэтому решено решать как можно больше задачек из этого блока. Здесь я буду публиковать все решенные задачи. 
 Начну с классики 2012 года (чуть усложнено)
 Условие задачи:
 
 Цитата Посредством радиотелескопа пытаются получать и анализировать сигналы из космоса. Различные шумы переводятся в последовательность целых (как
 положительных, так и отрицательных) чисел. Для того чтобы
 характеризовать различные участки космоса, данные, получаемые из одного
 района, было решено характеризовать максимальным произведением
 значений четырех сигналов, приходящих из этого района.
 
 Вам предлагается написать эффективную, в том числе по используемой
 памяти, программу (укажите используемую версию языка
 программирования, например Borland Pascal 7.0), которая будет
 обрабатывать результаты, приходящие из одного района, находя искомую
 величину. Следует учитывать, что из одного района может приходить очень
 много данных, но не может быть меньше четырех чисел.
 
 На вход программе в первой строке подаётся количество сигналов N.
 В каждой из последующих N строк записано одно целое число, по
 абсолютной величине не превышающее 100.
 Пример входных данных:
 +10
 +30
 +8
 +12
 -19
 -7
 +10
 +30
 -1
 0
 -5
 Программа должна вывести характеристику сигналов из данного района
 космоса – одно число, равное максимальному произведению четырех элементов
 последовательности чисел.
 Пример выходных данных для приведенного выше примера входных данных:
 108000
 Решение на PascalABC.NET:
 
 Код var min1, min2, min3, min4, max1, max2, max3, max4, N, i, x: integer; begin
 readln(N);
 max1 := -101;
 min1 := 101;
 for i := 1 to N do
 begin
 read(x);
 if x >= max1 then
 begin
 max4:=max3;
 max3:=max2;
 max2:=max1;
 max1:=x;
 end
 else if x >= max2 then
 begin
 max4:=max3;
 max3:=max2;
 max2:=x;
 end
 else if x >= max3 then
 begin
 max4:=max3;
 max3:=x;
 end
 else if x > max4 then max4:=x;
 if x <= min1 then
 begin
 min4:=min3;
 min3:=min2;
 min2:=min1;
 min1:=x;
 end
 else if x <= min2 then
 begin
 min4:=min3;
 min3:=min2;
 min2:=x;
 end
 else if x <= min3 then
 begin
 min4:=min3;
 min3:=x;
 end
 else if x < min4 then min4:=x;
 end;
 if (max1*max2*max3*max4) > (min1*min2*min3*min4) then
 writeln(max1*max2*max3*max4)
 else
 writeln(min1*min2*min3*min4);
 end.
 EGE 2013: МА: 87 + ИНФ: 88 + РУ: 70  + ФИ: 65 = 245,  222
 
 
 Сообщение отредактировал push23 - Суббота, 2013-04-20, 1:44 PM |  |  |  |  |  | 
| push23 | Дата: Суббота, 2013-04-20, 1:43 PM | Сообщение # 2 |  |   Студент Группа: Пользователи Сообщений: 67 Репутация: 25 Замечания: 0% Статус: Offline | Обратная задача 
 Условие задачи
 Цитата С помощью радиотелескопа пытаются получать и анализировать сигналы из космоса. Различные шумы переводятся в последовательность целых (как
 положительных, так и отрицательных) чисел. Для того чтобы
 характеризовать различные участки космоса, данные, получаемые из одного
 района, было решено характеризовать минимальным произведением
 значений двух сигналов, приходящих из этого района.
 Вам предлагается написать эффективную, в том числе по используемой
 памяти, программу (укажите используемую версию языка
 программирования, например Borland Pascal 7.0), которая будет
 обрабатывать результаты, приходящие из одного района, находя искомую
 величину. Следует учитывать, что из одного района может приходить очень
 много данных, но не может быть меньше двух чисел.
 Перед текстом программы кратко опишите используемый Вами алгоритм
 решения задачи.
 На вход программе в первой строке подаётся количество сигналов N.
 В каждой из последующих N строк записано одно целое число
 (положительное или отрицательное), по абсолютной величине не
 превышающее 10 000.
 Пример входных данных:
 6
 2540
 10
 541
 2301
 10
 3500
 Пример выходных данных для приведенного выше примера входных данных:
 100
 
 Программа должна вывести характеристику сигналов из данного района
 космоса – одно число, равное минимальному произведению двух элементов
 последовательности чисел.
 
 
Решение на Pascal.ABC.NET:
 Код var min1, min2, max1, max2,product, N, i, x: integer; begin
 readln(N);
 max1 := -10001;
 min1 := 10001;
 for i := 1 to N do
 begin
 readln(x);
 if x >= max1 then
 begin
 max2:=max1;
 max1:=x;
 end
 else if x > max2 then max2:=x;
 if x <= min1 then
 begin
 min2:=min1;
 min1:=x;
 end
 else if x < min2 then min2:=x;
 end;
 if (max1*max2) < (min1*min2) then
 product:=max1*max2
 else
 product:=min1*min2;
 if max1*min1 < product then product:=max1*min1;
 writeln(product);
 end.
 EGE 2013: МА: 87 + ИНФ: 88 + РУ: 70  + ФИ: 65 = 245,  222
 
 
 Сообщение отредактировал push23 - Суббота, 2013-04-20, 1:47 PM |  |  |  |  |  | 
| push23 | Дата: Понедельник, 2013-04-22, 1:37 PM | Сообщение # 3 |  |   Студент Группа: Пользователи Сообщений: 67 Репутация: 25 Замечания: 0% Статус: Offline | Еще одна, сначала казалась сложной   
 Условие задачи
 
 Цитата По каналу связи передается последовательность положительных целых чисел , … все числа не превышают 1000, их количество заранее неизвестно. Каждое число передается в виде отдельной текстовой строки, содержащей десятичную запись числа. Признаком конца передаваемой последовательности является число 0. Участок последовательности от элемента до элемента называется подъемом, если на этом участке каждое следующее число больше предыдущего. Высотой подъема называется разность . Напишите эффективную программу, которая вычисляет наибольшую высоту среди всех подъемов последовательности. Если в последовательности нет ни одного подъема, программа выдает 0. Программа должна напечатать отчет по следующей форме: Получено ... чисел Наибольшая высота подъема: …
 Размер памяти, которую использует Ваша программа, не должен зависеть от длины переданной последовательности чисел.
 Перед текстом программы кратко опишите используемый вами
 алгоритм решения задачи.
 Пример входных данных:
 144
 17
 27
 3
 7
 9
 11
 10
 0
 Пример выходных данных для приведенного выше примера входных данных:
 Получено 8 чисел
 Наибольшая высота подъема: 10
 Решение на Pascal.ABC.NET:
 
 Код var rise, rise_m, start, last, x, sum:integer; begin
 rise:=0; rise_m:=0;
 readln(x); start:=x; last:=x; readln(x); sum:=1;
 while x <> 0 do begin
 inc(sum);
 if x > last then
 rise:=x-start
 else begin
 start:=x;
 if rise > rise_m then rise_m:=rise
 end;
 last:=x;
 readln(x)
 end;
 writeln('Получено ', sum, ' чисел');
 if rise_m > rise then writeln('Наибольшая высота подъема: ', rise_m)
 else writeln('Наибольшая высота подъема: ', rise);
 end.
 Добавлено (2013-04-22, 1:35 PM)
 ---------------------------------------------
 Задачка с последней диагностики. Много кода получилось.
 
 Условие задачи:
 
   
 Решение на PascalABC.NET:
 
 Код var      i, x, y, N, K, t: integer;
 ctv,Ax, Ay, R, A_sum : array [1..4] of integer;
 Begin
 Write('Введите кол-во точек: ');
 Readln(N);
 Writeln('Введите координаты ',N,' точек: ');
 for i:=1 to N do
 begin
 readln(x,y);
 if (x>0) and (y>0) then
 begin
 inc(ctv[1]);
 if A_sum[1] < (abs(x)+abs(y)) then
 begin
 A_sum[1]:= abs(x)+abs(y);
 Ax[1]:=x; Ay[1]:=y;
 if abs(x) > abs(y) then R[1]:=abs(x)
 else R[1]:=abs(y)
 end;
 end
 else if (x<0) and (y>0) then
 begin
 inc(ctv[2]);
 if A_sum[2] < (abs(x)+abs(y)) then
 begin
 A_sum[2]:= abs(x)+abs(y);
 Ax[2]:=x; Ay[2]:=y;
 if abs(x) > abs(y) then R[2]:=abs(x)
 else R[2]:=abs(y)
 end;
 end
 else if (x<0) and (y<0) then
 begin
 inc(ctv[3]);
 if A_sum[3] < (abs(x)+abs(y)) then
 begin
 A_sum[3]:= abs(x)+abs(y);
 Ax[3]:=x; Ay[3]:=y;
 if abs(x) > abs(y) then R[3]:=abs(x)
 else R[3]:=abs(y)
 end;
 end
 else if (x>0) and (y<0) then
 begin
 inc(ctv[4]);
 if A_sum[4] < (abs(x)+abs(y)) then
 begin
 A_sum[4]:= abs(x)+abs(y);
 Ax[4]:=x; Ay[4]:=y;
 if abs(x) > abs(y) then R[4]:=abs(x)
 else R[4]:=abs(y)
 end;
 end;
 end;
 t:=maxint;
 if (ctv[1] <> 0) and (ctv[1] < t) then
 begin
 t:=ctv[1];
 K:=1
 end;
 if (ctv[2] <> 0) and (ctv[2] < t) then
 begin
 t:=ctv[2];
 K:=2
 end
 else if t = ctv[2] then
 begin
 if R[2] > R [K]then K:=2
 end;
 if (ctv[3] <> 0) and (ctv[3] < t) then
 begin
 t:=ctv[3];
 K:=3
 end
 else if t = ctv[3] then
 begin
 if R[3] > R [K]then K:=3
 end;
 if (ctv[4] <> 0) and (ctv[4] < t) then
 begin
 t:=ctv[4];
 K:=4
 end
 else if t = ctv[4] then
 begin
 if R[4] > R [K]then K:=4
 end;
 Writeln('K = ',K);
 Writeln('M = ',ctv[K]);
 Writeln('A = (',Ax[K],', ',Ay[K],')');
 Writeln('R = ',R[K]);
 End.
 EGE 2013: МА: 87 + ИНФ: 88 + РУ: 70  + ФИ: 65 = 245,  222
 
 
 Сообщение отредактировал push23 - Понедельник, 2013-04-22, 1:39 PM |  |  |  |  |  | 
| tooq | Дата: Понедельник, 2013-04-29, 10:15 PM | Сообщение # 4 |  |   Студент Группа: Пользователи Сообщений: 89 Репутация: 6 Замечания: 0% Статус: Offline | push23, реши задачу с последнего пробника, там где таблица очков игры 
 Математика - ? (будет 85)
 Русский язык - ? (будет 85)
 Информатика - ? (будет 100)
 |  |  |  |  |  | 
| luvtea | Дата: Суббота, 2013-05-04, 7:28 PM | Сообщение # 5 |  |   Студент Группа: Пользователи Сообщений: 36 Репутация: 0 Замечания: 0% Статус: Offline | Которая "Тетрис-онлайн" ?Цитата (tooq) реши задачу с последнего пробника, там где таблица очков игры
 СПбГУ '17 ПМ-ПУ
 |  |  |  |  |  | 
| se95 | Дата: Понедельник, 2013-05-06, 5:31 PM | Сообщение # 6 |  | Абитуриент Группа: Пользователи Сообщений: 2 Репутация: 0 Замечания: 0% Статус: Offline | Присоединяйтесь http://skladchik.com 
 
 Сообщение отредактировал se95 - Понедельник, 2013-05-06, 5:37 PM |  |  |  |  |  | 
| JustViktoriya | Дата: Понедельник, 2013-05-27, 10:34 PM | Сообщение # 7 |  | Абитуриент Группа: Пользователи Сообщений: 1 Репутация: 0 Замечания: 0% Статус: Offline | Здравствуйте. Вопрос по формулировке второй задачи. Ничего, что там сказано "минимальное произведение сигналов"? Просто я так прикинула, исходя из алгоритма, min1 и min2, а также max1 и max2 могут быть одновременно положительными или отрицательными числами, тогда их произведение - положительное число. Что, при наличии в последовательности положительных и отрицательных чисел, неверно, поскольку минимальное произведение в данном случае будет отрицательным числом. Не лучше ли найти минимум среди отрицательных и максимум среди положитеьльных и перемножить? Или я что-то не поняла в условии?
 |  |  |  |  |  | 
| prm2008 | Дата: Вторник, 2013-05-28, 2:39 AM | Сообщение # 8 |  |   Профессор Группа: Проверенные Сообщений: 815 Репутация: 1199 Замечания: 0% Статус: Offline | Да, ты правильно поняла условия. Если числа разных знаков, то мах произведение - двух чисел с мах модулями и одинаковыми знаками, а мин - произведение с разными знаками и мах модулями. Если знаки одинаковые, то это произведение двух мин и двух мах. Т.е. кроме первого минимума надо найти второй, с мах аналогично. 
 ...чтобы оставаться на одном месте нужно все время двигаться вперед...
 |  |  |  |  |  | 
| Amsaredoc | Дата: Вторник, 2013-05-28, 1:30 PM | Сообщение # 9 |  | Магистр Группа: Проверенные Сообщений: 211 Репутация: 15 Замечания: 0% Статус: Offline | Цитата укажите используемую версию языка программирования, например, Borland Pascal 7.0народ! кто знает что писать?ЕГЭ пишу на Си (компилятор GCC)
 
 План Р+М+И+Ф=400, получилось - 367, средний балл - 91,75 (Дневник)
 |  |  |  |  |  | 
| push23 | Дата: Вторник, 2013-05-28, 4:21 PM | Сообщение # 10 |  |   Студент Группа: Пользователи Сообщений: 67 Репутация: 25 Замечания: 0% Статус: Offline | Цитата (Amsaredoc) народ! кто знает что писать?ЕГЭ пишу на Си (компилятор GCC)пиши язык, название и версию компилятора
 
 Вот задачка:
 
 Цитата На вход программе подается целое десятичное число, длина которого заранее неизвестна. Требуется написать программу, которая выводит это число в двоичном и шестнадцатеричном представлении. Пример входных данных:
 1000000
 Программа должна вывести:
 Число в двоичной системе счисления: 11110100001001000000
 Число в шестнадцатеричной системе счисления: F4240
 Решение на PascalABC.NET:
 
 Цитата Var x,er,ints :integer;
 tt,num,temp :string;
 function numbers(n: integer): string;
 begin
 case n of
 0000: Result := '0';
 0001: Result := '1';
 0010: Result := '2';
 0011: Result := '3';
 0100: Result := '4';
 0101: Result := '5';
 0110: Result := '6';
 0111: Result := '7';
 1000: Result := '8';
 1001: Result := '9';
 1010: Result := 'A';
 1011: Result := 'B';
 1100: Result := 'C';
 1101: Result := 'D';
 1110: Result := 'E';
 1111: Result := 'F';
 end;
 end;
 
 begin
 writeln('Введите число в десятичной с-сч:');
 readln(ints);
 while ints > 0 do begin
 if ints mod 2 <> 0 then tt:='1'+tt
 else tt:='0'+tt;
 ints:= ints div 2;
 end;
 writeln('Число в двоичной системе счисления: ',tt);
 while (length(tt) > 4) do begin
 temp:=Copy (tt, length(tt)-3, 4);
 delete(tt, length(tt)-3, 4);
 Val (temp, x, er);
 num:=numbers(x)+num;
 end;
 Val (tt, x, er);
 num:=numbers(x)+num;
 writeln('Число в шестнадцатеричной системе счисления: ',num);
 end.
 EGE 2013: МА: 87 + ИНФ: 88 + РУ: 70  + ФИ: 65 = 245,  222
 
 
 Сообщение отредактировал push23 - Вторник, 2013-05-28, 4:22 PM |  |  |  |  |  | 
| luvtea | Дата: Вторник, 2013-05-28, 4:45 PM | Сообщение # 11 |  |   Студент Группа: Пользователи Сообщений: 36 Репутация: 0 Замечания: 0% Статус: Offline | Цитата (push23) case n of 0000: Result := '0';
 0001: Result := '1';
 0010: Result := '2';
 0011: Result := '3';
 0100: Result := '4';
 0101: Result := '5';
 0110: Result := '6';
 0111: Result := '7';
 1000: Result := '8';
 1001: Result := '9';
 1010: Result := 'A';
 1011: Result := 'B';
 1100: Result := 'C';
 1101: Result := 'D';
 1110: Result := 'E';
 1111: Result := 'F';
Охлол
 А по-другому никак совсем, да ?
 
 СПбГУ '17 ПМ-ПУ
 |  |  |  |  |  | 
| push23 | Дата: Вторник, 2013-05-28, 5:09 PM | Сообщение # 12 |  |   Студент Группа: Пользователи Сообщений: 67 Репутация: 25 Замечания: 0% Статус: Offline | luvtea, Никак   Мне просто быстро нужно было написать эту программку, вот и не заморачивался)
 
 EGE 2013: МА: 87 + ИНФ: 88 + РУ: 70  + ФИ: 65 = 245,  222
 |  |  |  |  |  | 
| copral | Дата: Вторник, 2013-05-28, 5:49 PM | Сообщение # 13 |  | Абитуриент Группа: Пользователи Сообщений: 1 Репутация: 0 Замечания: 0% Статус: Offline Город: Казань | Цитата push23, реши задачу с последнего пробника, там где таблица очков игрытоже интересно
 |  |  |  |  |  | 
| push23 | Дата: Вторник, 2013-05-28, 6:14 PM | Сообщение # 14 |  |   Студент Группа: Пользователи Сообщений: 67 Репутация: 25 Замечания: 0% Статус: Offline | Цитата (tooq) push23, реши задачу с последнего пробника, там где таблица очков игры
 У нас не проводятся пробники от МИОО. Скиньте сюда условие, попробую
 
 EGE 2013: МА: 87 + ИНФ: 88 + РУ: 70  + ФИ: 65 = 245,  222
 
 
 Сообщение отредактировал push23 - Вторник, 2013-05-28, 6:15 PM |  |  |  |  |  |  | 
 
 
 
 |