Решения задач С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 |
|
| |
|
|
|