Форум » Олимпиадное программирование » Олимпиада для учителей информатики » Ответить

Олимпиада для учителей информатики

inf777: Напоминаю всем учителям информатики, что 10 сентября 2006 года стартует олимпиада по информатике для учителей информатики. Задачи разработаны доцентом кафедры математической информатики факультета кибернетики Киевского национального университета имени Тараса Шевченко Медведевым Михаилом Геннадьевичем. Поступило предложение привлечь не только учителей, но и учеников. Как вы на это смотрите? С началом конкурса мы определились, осталось определиться со сроком подведения итогов. У кого какие предложения по этому поводу, учитывая, что будет 5 задач не высокого, по олимпиадным меркам, уровня сложности? Каким образом можно будет поощрить победителя? Внимание! Три задачи для разминки (с решениями), будут выложены на сайте http://www.inf777.narod.ru/ до 20 августа 2006 года.

Ответов - 59, стр: 1 2 3 All

dessdess: Конкурс по информатике "Отличник" - всероссийский дистанционный конкурс, в котором могут принять участие ученики 2-11 классов, а также студенты первых курсов учреждений среднего профессионального образования. Это отличный шанс для учеников показать свои знания и навыки, которые они приобрели на школьных уроках информатики или самостоятельно, изучая компьютер. https://konkurs-otlichnik.ru/inf

inf777: Итак, олимпиада началась, на данный момент получены и проверены решения трех участников соревнований. Лидером, набравшим 4,5 балла из 5 возможных стал Везиков Сергей Викторович, учитель ИВТ Краснокоммунарской средней школы. Решения всех олимпиадных задач лично проверяет Михаил Медведев. Кроме того, мы постараемся каждому участнику выслать краткий разбор «полетов» по всем задачам. И это еще не все хорошие новости. Михаил Медведев предложил каждые 2-3 дня выкладывать на форуме по одной новой задаче для решения. После истечения этого времени, Михаилом Медведевым будет дан подробный разбор задачи, а также будет указано на ошибки, допущенные при решении. Таким образом, у вас постоянно будет возможность заниматься решением олимпиадных задач и получать квалифицированную помощь. Итак, первая задача: Написать программу решения следующей задачи. По заданному натуральному числу ищется его сумма цифр. Если сумма больше 9, то снова ищется ее сумма цифр. Процесс продолжается до тех пор, пока очередная сумма не станет меньшей 10. Необходимо найти это значение последней суммы. Например, для числа 12345 сумма цифр равна 1 + 2 + 3 + 4 + 5 = 15. Ищем сумму цифр числа 15. Она равна 1 + 5 = 6. Результатом будет 6. Желаю успеха!

inf777: Это решение первой задачи поступило от Везикова Сергея Викторовича. Напоминаю, что эти задачи рассчитаны для разбора решений именно на форуме, так что отправлять решения на e-mail нет необходимости. Размещайте свои решения прямо в этом разделе форума. uses crt; var a,s:integer; function sum(a:integer):integer; var i:integer; begin i:=0; while a<>0 do begin i:=i+(a mod 10); a:=a div 10; end; sum:=i end; begin clrscr; readln(a); s:=sum(a); while s>10 do s:=sum(s); writeln(s); readkey end.


medv73: Решения задач предлагается писать здесь же, в форуме. Я постараюсь комментировать Ваши решения - здесь же, в форуме. Решение предыдущей задачи я пока не даю, так как хотелось бы увидеть Ваши предлагаемые решения - программы. Но уже подошло время следующей задачи - вот ее условие: Определить, сколько чисел в инервале от min до max (включительно) нацело делится на factor. Например, если min = 7, max = 24, factor = 3, то ответ будет 6, так как между числами 7 и 24 (включительно) находится 6 чисел, делящихся на 3: 9, 12, 15, 18, 21, 24.

sedovmih: var i,j,factor, max,min:Integer; begin Write('Input min=');ReadLn(min); Write('Input max=');ReadLn(max); Write('Input factor=');ReadLn(factor); for i:=min to max do if i mod factor=0 then inc(j); Write('Output > ',j); end.

medv73: Попробуйте оптимизировать программу. Считайте, что значения min и max порядка 10^16 (в Паскале Вам пришлось бы воспользоваться типом Extended, в Си и уже в Делфи для этого есть 64 битовый тип). В таком случае при использовании for i:=min to max do вы получили бы ошибку "Time Limit". Жду следующих вариантов Вашей программы.

sedovmih: var i,j,factor, max,min:Integer; begin ReadLn(min); ReadLn(max); ReadLn(factor); i:=min; repeat if i mod factor =0 then begin min:=i; j:=1; end until j<>1; j:=((max-min) div factor)+1; Writeln('Output > ',j); end.

medv73: Уважаемые участники форума! Задачи я подбираю начиная с простого уровня. Но некоторые из них кроме очевидного решения, имеют довольно интересное, простое олимпийское решение. Есть две категории: техника - умение решать классические задачи классическим путем и математика - умение находить именно "красивое " решение. To Везиков, по поводу первой задачи: попробуйте найти решение, вообще не использующее ни единого цикла :-) To sedovmih: Ваша программа дает неверный ответ для min = 3, max = 4, factor = 5. Ваша программа дает 1, а на самом деле ответ должен быть 0, так как между 3 и 4 нет чисел, делящихся на 5. На тесте min = 2, max = 8, factor = 2 программа зацикливается. Я постараюсь в следующих задачах конкретнее задавать спецификацию входа и выхода. Например, для второй задачи (с учетом целочисленного типа integer в Паскале) имеют место ограничения -30000 <= min, max <= 30000,min <= max, 1 <= factor <= 30000. Предлагаю следующий вариант работы: или Вы в какой-то момент предлагаете мне вывесить свое решение с объяснением, или подождать, дать время подумать (но не более 2-3 дней :) ).

medv73: Предлагаю Вашему вниманию задачу посложнее. Альберт и его две сестры Бетти и Карина делят имущество. Стоимости вещей, доставшихся в наследство, выписаны на куске бумаги и задаются массивом assets. Альберт берет ножницы и разрезает бумагу между некоторыми двумя числами. Потом Бетти таким же образом разрезает один из кусков. Далее Карина выбирает кусок с максимальной суммой. Из оставшихся двух кусков выбор делает Бетти. Последний кусок достается Альберту. Каждый из участников при выборе старается получить максимальную сумму наследства. Сестры обижены на брата, и в своих выборах будут наказывать его, если только при этом не пострадает их прибыль. Например, если у одной из сестер есть два разные варианта получить одну и туже сумму имущества, то она выберет тот из вариантов, при котором ее сестра получит больше. Найти максимальную сумму, которую может обеспечить Альберт своим первым разрезом. Давайте на начальном этапе пока не писать программу (просто на Паскале код выглядел бы намного сложнее чем это можно реализовать на Си), а просто найдем алгоритм - как следует действовать Альберту, чтобы обеспечить максимальную сумму своим первым разрезом. Поставлю задачу более конкретно: если на куске бумаги написаны числа 1 1 1 1 1 1 1 1 1 (девять единиц),то как должен действовать Альберт и какую максимально возможную сумму наследства он может получить?

medv73: Повторю еще раз условие задачи: По заданному натуральному числу ищется его сумма цифр. Если сумма больше 9, то снова ищется ее сумма цифр. Процесс продолжается до тех пор, пока очередная сумма не станет меньшей 10. Необходимо найти это значение последней суммы. Например, для числа 12345 сумма цифр равна 1 + 2 + 3 + 4 + 5 = 15. Ищем сумму цифр числа 15. Она равна 1 + 5 = 6. Результатом будет 6. Решение: Обозначим сумму цифр числа n через S(n). Число n делится на 9 тогда и только тогда, когда S(n) делится на 9. В задаче требуется найти значение S(S(...S(n)...)), которое меньше 10. Оно равно n mod 9, так как числа n и S(S(...S(n)...)) дают одинаковый остаток при делении на 9. При этом если входное значение n = 0, то результат равен 0. Если n > 0 и n mod 9 = 0, то результирующее значение равно 9. program sum; var n:integer; begin readln(n); if (n = 0) then writeln(0) else if (n mod 9 = 0) then writeln(9) else writeln(n mod 9); end.

medv73: У нас еще осталась одна нерешенная задача, но я хочу предложить следующую: Для заданного числа n найти ближайшее целое, которое делится на b. Если таких чисел несколько, то найти наибольшее. Например, если n = 100, b = 3, то ближайшим целым к 100, делящимся на 3, будет 99. Если n = 5, b = 10, то ответом будет 10. По отношению к 5 числа 0 и 10 находятся на одинаковом расстоянии. Но по условию в таком случае требуется найти наибольшее число. Если n = 4, b = 10, то ответом будет 0 Ограничения на входные данные: 0 < n <= 10^6, 2 <= b <= 500. В Паскале используйте тип longint. (операция ^ - это степень) Жду Ваших решений :-)

medv73: Для умения эффективного решения олимпиадных задач следует обладать двумя способностями: 1. Алгоритмическое мышление - то есть умение математически решать задачу. 2. Техника. Для каждого языка она своя, в Си она на порядок выше, но пока остановимся на Паскале. Предлагаю следующие упражнения (задачи) на технику: 1. В переменных a и b находятся целые числа. Поменять значения переменных местами. Ни у кого не возникнет проблемы решения задачи, вводя новую переменную. А попробуйте решить эту задачу не вводя новой переменной. 2. Все вы наверное знаете что такое двоичная система исчисления. Например, 7 = 111, 10 = 1010. В задаче требуется по заданному натуральному числу n уничтожить последнюю единицу в ее бинарном представлении. То есть если n = 7, то ответом будет 6. Пояснение: 7 = 111, уничтожая последнюю единицу, получим 110, что является 6 в десятичном представлении. Если n = 10, то ответом будет 8, так как 10 = 1010, уничтожаем последнюю единицу: 1000 = 8. Для числа n = 8 ответом будет 0. Я пока не хочу давать наводящих ответов, но и затягивать решения задач не хочется. Давайте установим срок 3-4 дня, после чего я вывешу ответы.

Учитель: Честно говоря, мне уже попадалась где-то эта задача. Вот решение: var x,y: integer; begin x:= 1; y:= 2; x:= x+y; y:= x-y; x:= x-y; writeln (x,y); end. На входе 1 и 2, на выходе 2 и 1. Может стоит ввести сквозную нумерацию всех задач? Например 1А, 7В и т.д.?

medv73: Решение засчитывается! Только вывод лучше писать так: writeln (x,' ',y); Так красивее. Вообще многие предлагаемые мной задачи встречались. Задача про обмен местами значений, например, есть в книге Шеня. Конечно, следующие задачи будем нумеровать - так действительно лучше. Чтобы не сбиться с нумерации считаем, что все предложенные ранее здесь задачи были подготовительными и без номера. У нас еще остались нерешенными две задачи и одно упражнение.

nikifor: Упражнение 2 var n,m,k:integer; begin readln(n); m:=1; k:=n; while n mod 2<>1 do begin n:=n div 2; m:=m*2 end; writeln(k-m); end.

anna: program task2; var n, b, c, d,i: integer; begin write('n=');readln(n); write('b=');readln(b); c:=n;d:=n; if (n mod b)=0 then writeln('Otvet=',c) else begin repeat c:=c+1; until (c mod b)=0; repeat d:=d-1; until (d mod b)=0; if abs(d-n)=abs(c-n) then writeln('Otvet=',c) else if abs(d-n)<abs(c-n) then writeln('Otvet=',d) else writeln('Otvet=',c); end; readln; end.

nikifor: var min,max,factor:longint; begin readln(min,max,factor); if min mod factor=0 then min:=min else min:=min+(factor-min mod factor); if min=max then writeln(1) else if min< max then writeln((max-min) div factor+1) else writeln (0); end.

medv73: Упражнение 2 работает правильно. А попробуйте сделать его без цикла! На то и олимпиадная задача, чтобы написать олимпиадное решение :-) Подсказка: решение можно написать одним выражением. Вторая задача работает верно, ошибок не нашел, но что-то уж слишком длинный код. Попробуйте обойтись меньшим количеством условных операторов. Кстати, небольшая поправочка к моему решению задачи про сумму цифр числа. Вместо кода program sum; var n:integer; begin readln(n); if (n = 0) then writeln(0) else if (n mod 9 = 0) then writeln(9) else writeln(n mod 9); end. можно написать program sum; var n:integer; begin readln(n); writeln((n-1) mod 9 + 1); end. Код явно короче, и оно работает! Работает потому что в Паскале -1 mod 9 = -1, хотя математически это будет 8.

Geliya: program factor; var kol,mx,mn,min,max,factor:integer; begin readln(min); readln(max); readln(factor); mn:= min div factor; mx:= max div factor; kol:=mx-mn; if (min mod factor)=0 then inc(kol); writeln(kol); end.

medv73: Ваша программа дает верные ответы, когда входные числа неотрицательны. По условию входные числа целые. Например, Ваша программа не верна когда min = -3, max = 0, factor = 5. Программа дает ответ 0, хотя должна 1 (имеется число 0, которое делится на 5). Что-то никто не предлагает решение задачи про раздел имущества брата и двух сестер (условие смотри выше). Задача сложная, но я прошу не писать программу, а просто дать ответ для конкретного входного значения 1 1 1 1 1 1 1 1 1 (9 единиц).

Олег: Задача 1- uses crt; var a,b,c:longint; begin clrscr; readln(a);b:=0; repeat b:=b+(a mod 10); a:=a div 10; until(a<=0); if b > 9 then begin repeat c:=c+(b mod 10); b:=b div 10; until(b<=0); writeln(c); end else writeln(b) end.

medv73: To Олег: Оптимальное решение этой задачи я уже написал выше. Она решается без использования циклов. Уже прошло достаточно времени, поэтому привожу решение задачи про минимум, максимум и делитель (min,max, factor): var min,max,factor,res:longint; begin readln(min,max,factor); while(min mod factor <> 0) do Inc(min); while(max mod factor <> 0) do Dec(max); if (min > max) then res := 0 else res := (max - min) div factor + 1; writeln(res); end. Ответ на упражнение про уничтожение последней единицы в бинарном представлении: var n,res:longint; begin readln(n); res := n and (n-1); writeln(res); end. Подумайте, почему битовая операция n and (n-1) уничтожает последнюю единицу в двоичном представлении. Следующие предлагаемые задачи я буду нумеровать. Задача 1. Имеется кипа из numCrates корзин. Ее следует загрузить в машины, вместительность каждой из которых равна loadSize. Если кипа имеет размер, больший loadSize, то она делится пополам и каждую из частей рекурсивно грузят в машины. Если размер кипы нечетный (numCrates = 2n + 1), то при ее делении пополам в одной кипе окажется n корзин , а в другой n + 1. Сколько потребуется машин, чтобы загрузить все numCrates корзин? Задача 2. (Условие ее приводил ранее, но попыток решения еще не видел) Для заданного числа n найти ближайшее целое, которое делится на b. Если таких чисел несколько, то найти наибольшее. Например, если n = 100, b = 3, то ближайшим целым к 100, делящимся на 3, будет 99. Если n = 5, b = 10, то ответом будет 10. По отношению к 5 числа 0 и 10 находятся на одинаковом расстоянии. Но по условию в таком случае требуется найти наибольшее число. Если n = 4, b = 10, то ответом будет 0 Задача 3. В задаче требуется перевести значение температуры из одной шкалы в другую. Известно, что шкалы находятся в линейном соотношении. То есть если t1 и t2 – одна и та же температура в разных шкалах, то существуют такие действительные числа a и b, что t1 = a * t2 + b. Известны точка замерзания f1 и точка кипения воды b1 первой шкалы, а также точка замерзания f2 и точка кипения b2 второй шкалы. Необходимо перевести значение температуры t из первой шкалы во вторую. Например, если f1 = 0, f2=100, b1 = 1, b2 = 101, t = 28 то результатом будет 29. Помните, что результат является действительным числом!

Nadegda: var numCrates,loadSize:integer; function load(n,m:integer):integer; begin if n<=m then load:=1 else if n mod 2=0 then load:=2*load(n div 2,m) else load:=load(n div 2,m)+load(n div 2+1,m) end; begin readln(numCrates,loadSize); writeln('m=',load(numCrates,loadSize)); readln end.

Nadegda: var n,b,d1,d2:integer; begin readln(n,b); d1:=n-n mod b; d2:=d1+b; if n-d1 < d2-n then writeln(d1) else writeln(d2); readln; end.

Nadegda: Альберт разрежет кусок на такие части: 1 1 1 и 1 1 1 1 1 1, далее Бетти, чтобы не обидеть себя разрежет больший кусок на 1 1 1 и 1 1 1, и все получат поровну, т.е. по 3, при всех других вариантах Альберту достается меньше. Альберт, разрезая кусок, должен отрезать часть, составляющую ближайшее целое к трети наследства.

Nadegda: Нет, я не права. Если Альберт разрежет кусок на такие части: 1 1 1 и 1 1 1 1 1 1, далее Бетти, разрежет больший кусок на части 1 и 1 1 1 1 1, Карина заберет кусок 1 1 1 1 1, Бетти все равно достается 1 1 1, отрезанный Альбертом, тогда Альберту достанется всего 1. …Надо еще подумать.

Nadegda: Альберт, зная тактику сестер, должен отрезать кусок заведомо меньший трети. Т.е в нашем случае он разрежит на 1 1 и 1 1 1 1 1 1 1, тогда Бетти делит больший кусок, стремясь к равным частям, в данном примере 1 1 1 и 1 1 1 1, Альберту достается кусок 1 1.

Nadegda: Строим уравнение прямой, проходящей через точки (f1,f2) и (b1,b2), оно будет выражать зависимость t2(t1) var f1,f2,b1,b2,t1,t2: real; begin readln(f1,f2,b1,b2,t1); if b1<>f1 then t2:=(b2-f2)*t1/(b1-f1)+(f2*b1-b2*f1)/(b1-f1) else t2:=t1; writeln(t2:0:3); readln end. Только вот как учесть ограничения на допустимость исходных данных?

medv73: 1. Задача 1 о загрузке машин решена верно. Реализация рекурсивного варианта - именно то, чего хотел автор. 2. Задача о разделе имущества решена верно. Альберт в лучшем случае может получить кусок 1 1. 3. Задача 2 про округление чисел решена верно. НО: попробуйте ее решить при помощи лишь одного выражения, не используя условных операторов. 4. Задача решена неправильно. Например, на тестах f1 = 17, f2 = 98, b1 = -123, b2 = 12, t1 = 22 Ваша программа дает 101.071, а правильный ответ -114.6666667. Или например для f1 = 0, f2 = 10, b1 = -10, b2 = 0, t1 = 2 Ваша программа дает 12.000, а должно быть -8.000. Таким образом задача про раздел имущества и о загрузке машины (задача 1) считаются решенными. Решения задач 2 и 3 принимаются еще пару дней. Задача 4. В строке задано арифметическое выражение, содержащее однозначные числа и операции ‘+’, ‘-’ или ‘*’. Выражение не содержит пробелов. Необходимо найти значение этого выражения, если известно, что все операции имеют одинаковый приоритет и выполняются слева направо. Например, для входной строки '2+2*2' ответ должен быть 8 (все операции имеют одинаковый приоритет!), а для строки '4-8*9*1' ответом будет -36.

nikifor: Задача 1 var n,l,s:longint; procedure p(n:longint); begin if n>l then begin p(n div 2); p(n - (n div 2)); end else inc(s); end; begin readln(n,l); s:=0; p(n); writeln(s); end.

nikifor: Задача 1 var n,l,s:longint; procedure p(n:longint); begin if n>l then begin p(n div 2); p(n - (n div 2)); end else inc(s); end; begin readln(n,l); s:=0; p(n); writeln(s); end. Задача 2 var n,b:longint; begin readln(n,b); if n<n-abs(n mod b)+b/2 then writeln(n-abs(n mod b)) else writeln(n+b-abs(n mod b)); end.

Nadegda: var s:string;r,o,err:integer; begin readln(s); val(s[1],r,err); delete (s,1,1); while length(s)>1 do begin val(s[2],o,err); case s[1] of '+':r:=r+o; '-':r:=r-o; '*':r:=r*o; end; delete (s,1,2); end; writeln(r); readln; end.

nikifor: var f1,b1,f2,b2,t1,t2:real; begin readln(f1,b1); readln(f2,b2); readln(t1); t2:=(f2-b2)*(t1-b1)/(f1-b1)+b2; writeln(t2); end. Тесты при решении задачи №3 неверные Порядок ввода не соблюдается, в условии задачи №3

medv73: To Nadegda: Задача о вычислении выражения решена верно. To nikifor: Извиняюсь. Вы правы. Ваша программа работает верно. Задача 2 про округление чисел. Решение: var n,b,res:integer; begin readln(n,b); res := ((n + b div 2) div b) * b; writeln(res); end. Задача 4. В компьютерных системах несколько процессов могут одновременно читать данные, но только один процесс может выполнять операцию записи в течение одного такта времени. Строка trace содержит историю работы системы и состоит из символов ‘R’ (чтение) и ‘W’ (запись). Вычислить минимальное время, за которое могут быть произведены все операции procs процессами. Например, если trace = 'RWWRRR', procs = 3, то ответом будет 4. если trace = 'RRRRRRRRRR', procs = 4, то ответом будет 3.

Nadegda: var trace:string; procs,i,k,kr:integer; begin readln(trace); readln(procs); k:=0; kr:=0; for i:=1 to length(trace) do begin if trace='w' then begin k:=k+1; if kr<>0 then begin k:=k+1; kr:=0;end; end; if (trace='r') then begin kr:=kr+1; if kr=procs then begin k:=k+1; kr:=0 end; end end; if kr<>0 then k:=k+1; writeln (k); readln; end. При изменении порядка исходных данных результаты моей программы по задаче №3 тоже совпадают с вашими.

inf777: Мне понравилась задачка о дележе наследства. От себя тоже хочу «подкинуть» логическую задачу. Чтобы не путать нумерацию назову ее «Задача от админа». Имеется 10 кучек монет, в каждой кучке по 10 монет. Одна из кучек состоит из фальшивых монет. Известен вес настоящей монеты и установлено, что каждая фальшивая монета на один грамм тяжелее настоящей. Монеты можно взвешивать на пружинных весах. Как за одно взвешивание отыскать кучку состоящую из фальшивых монет? Правильного ответа я не знаю J, но у меня есть своя версия решения задачи.

Nadegda: Из каждой кучки берем количество монет равное ее номеру. При взвешивании оказывается, что вес всего этого количества монет больше на N граммов, чем если бы все монеты были настоящими. N-номер кучки с фальшивыми монетами. Решение придумала не сама, где-то читала. Спасибо администратору за организацию интересного форума

inf777: Я согласен с решением задачи про монеты, у меня был такой же вариант. Решение пришло в голову довольно быстро. Предложил решить эту задачу ученикам на уроке информатики, но пока решение они не нашли. У меня есть задумка собрать побольше подобных задач и давать их ученикам в начале каждого урока. Дело в том, что в поиск правильного решения включаются даже самые нерадивые ученики. Если у кого-то есть сборник подобных задач, то прошу выслать мне на e-mail. Можно сначала давать по одной задачке на форуме (для учителей), а затем использовать их на уроках. Что касается благодарностей по поводу форума, то идея создания этого раздела принадлежит исключительно Михаилу Медведеву, так что все благодарности направляйте в его адрес.

medv73: To all: что-то я снова перепутал нумерацию задач. Задача про процессоры и операции чтения/записи имеет номер 5. To Nadegda: Что-то Ваша программа на все мои тесты дает ответ 0. Может вместо if trace='w' then Вы хотели написать if trace='w' then ... Задача 6. Рассмотрим следующую телеигру. Имеется три двери, за двумя из которых спрятано по корове, а за третьими – приз. Игрок выбирает дверь, стараясь угадать, где находится приз. Ведущий после выбора игроком двери предлагает следующую сделку: он согласен открыть некоторую дверь, за которой находится корова в обмен на то, что игрок обязательно сменит дверь (поменяет свое мнение). Вопрос: как следует поступить игроку: менять свое мнение или нет? Подсказка: Подсчитайте вероятность выигрыша приза в случаях, когда игрок меняет свое мнение и когда нет. Задача 7. При покупке - продаже товаров объем, как правило, выступает стоимостной величиной. Например, если арбуз разделить на несколько частей, то сумма этих частей стоит столько же, сколько и весь арбуз. В некоторой стране к власти пришли математики и решили в качестве стоимостной величины считать не объем товара, а площадь его полной поверхности. Сфера делится на n равных частей – долек осевыми разрезами. Какую прибыль в процентах получит математик, если он купит сферу целиком, а продаст ее отдельно по долькам? Известно, что n > 0.

medv73: я понял - форум съедает квадратные скобки. To Nadegda: Ваша программа правильна. Просто я вводил строку заглавными буквами, а Вы обрабатывали малые буквы. Старайтесь придерживаться спецификации входных данных.

Nadegda: Вероятность отгадать у игрока при первой попытке составляет 1/3. Если предположить, что ведущий - лицо незаинтересованное в проигрыше игрока, и независимо от правильности выбора при первой попытке игрока ведущий предлагает сделку, и откроет дверь, за которой спрятана корова, то тогда у игрока вероятность выигрыша становится равной 1/2. Выходит, что игроку стоит принять условие сделки и поменять свой выбор.

medv73: Эта фраза верна: "Вероятность отгадать у игрока при первой попытке составляет 1/3. " А вот вероятность угадывания в случае смены мнения равна не 1/2. Думайте.

Nadegda: Площадь каждой части составит s=4*Pi*R2/n+Pi*R2 Сумма площадей частей S=4*Pi*R2+n*Pi*R2 Прибыль составит (n*Pi*R2)/(4*Pi*R2)*100=25*n%

Nadegda: Вероятность отгадать у игрока при первой попытке составляет 1/3, а открыть дверь с коровой - 2/3. Если при первой попытке он выбрал дверь, за которой приз, тогда при участии в сделке он меняет выбор и на приз уже не попадает(вероятность выигрыша =0). Если же при первой попытке он выбрал дверь, за которой корова (вероятность 2/3), тогда, принимая участие в сделке, он может выбрать приз с вероятностью 1/2. Общая вероятность выигрыша в этой ситуации составляет 2/3*1/2=1/3 - условная вероятность. Выходит, что игроку не стоит принимать условие сделки и менять свой выбор: вероятность выигрыша приза в этой ситуации у игрока не растет, а при первом выборе приза вообще обращается в 0.

АС: *PRIVAT*

АС: *PRIVAT*

АС: *PRIVAT*

Учитель: Хотелось бы узнать о курсах поподробнее.

inf777: В этом разделе наступило полное затишье, но этому есть свои причины. Михаил Медведев, после поездки на полуфинал чемпионата мири по программированию, занят накопившимися текущими делами. В его отсутствие, на форуме, я предлагаю для решения такую задачу: Каждый элемент квадратной матрицы размеренности NxN равен нулю, либо единице. Найдите количество «островов», образованных единицами. Под «островом» понимается группа единиц, со всех сторон окруженная нулями (или краями матрицы). Единицы относятся к одному «острову», если из одной из них можно перейти к другой «наступая» на единицы, расположенные в соседних клетках. Соседними являются клетки, граничащие по горизонтали или вертикали. P.S. Эта задача была предложена для решения на районной олимпиаде школьников по информатике в Старополтавском районе Волгоградской области в прошлом, 2005 году.

IT: Что-то давно нет ответов на последнюю задачу. Неужели никто не может решить? Если я правильно понял, надо использовать стандартную процедуру обхода матрицы ладьей.

LoW: inf777 пишет: Каждый элемент квадратной матрицы размеренности NxN равен нулю, либо единице. Найдите количество «островов», образованных единицами. Под «островом» понимается группа единиц, со всех сторон окруженная нулями (или краями матрицы). Единицы относятся к одному «острову», если из одной из них можно перейти к другой «наступая» на единицы, расположенные в соседних клетках. Соседними являются клетки, граничащие по горизонтали или вертикали. Кстати вполне реальная задача моделирования, нахождения количества кластеров перколяции. Правда до олимпиадной не дотягивает по определению, там очень простой рекурсивный алгоритм. Что конечно поразило в олимпиаде очень низкий уровень самих задач. В реальных олимпиадах он выше причем значительно. Хотя на меня олимпиады по программированию производят смешанные чувства, они немного странны, там ценится чистая алгоритмизация, и местами непонимание всего остального вот например ваша вторая задача подсчет суммы ряда, ничего не сказано про погрешности округления и т.п.

inf777: LoW пишет: Что конечно поразило в олимпиаде очень низкий уровень самих задач. В реальных олимпиадах он выше причем значительно. Хотя на меня олимпиады по программированию производят смешанные чувства, они немного странны, там ценится чистая алгоритмизация, и местами непонимание всего остального Уровень олимпиадных задач на нашем сайте выбран намеренно очень низким, т.к. в этом случае в ней смогли принять участие люди начинающие осваивать олимпиадное программирование. О том, что задачи слишком простые, нам уже писали некоторые участники. Постараемся, в обозримом будущем, провести еще олимпиаду с задачами более высокого уровня. Лично у меня, олимпиады по информатике не вызывают смешных чувств. Наверняка, человек, добившийся определенных достижений на этом поприще, сможет применить полученные знания при работе над реальными проектами.

LoW: inf777 пишет: Лично у меня, олимпиады по информатике не вызывают смешных чувств. Наверняка, человек, добившийся определенных достижений на этом поприще, сможет применить полученные знания при работе над реальными проектами. Все может быть, мне не нравится подход к олимпиадам по программированию, напрмер все классы в одной тележке, автоматизация тестирования и т.п. Правда это возможно потому, что я в свое время прошел через олимпиады но по физике, там совсем другие принципы, другой класс задач. Там (на нормальных олимпиадах) задачи на понимание сути явления, что происходит почему и как. Поэтому у нас даже хорошие программисты совсем не чувствуют мат. модели, то есть где ошибка модели, а где расчетов и т.п., ибо в таких задачах не проходит чистая алгоритмизация. А познания в физике у учеников падают по-моему вообще ниже плинтуса.

Acc: на счет курсов пишите на маил: sapant@yandex.ru

inf777: Не дождавшись от участников форума вариантов решения последней задачи, я разместил ее решение в разделе сайта по адресу http://www.inf777.narod.ru/olym/olymp_2005.htm . По этому же адресу размещены решения других задач (районная олимпиада по информатике, 2005 год, Старополтавский район, Волгоградская область).

$f@ir@t: 1 Мулюкова Лилия Ильдаровна 5 1 2 Везиков Сергей Викторович 4,5 2 АААА!!! Я в шоке товарищи коллеги Лидировать столько времени и в итоге обставили на финише Хочу второй этап

inf777: Здравствуйте, Сергей Викторович. Честно говоря, я думал, что Вы будете победителем олимпиады. С присуждением первого место не все прошло гладко. Дело в том, что одна из задач участницы, которая объявлена в итоге победительницей, выдавала неверное решении при использовании компилятора Turbo Pascal и мы, было, чуть не засчитали ей решение этой задачи. Но задача дала верный результат при использования Delphi и поскольку по условиям олимпиады не было ограничений на выбор компилятора, мы приняли это решение. Что касается второго тура, то он возможно и будет когда-нибудь. Не думаю, что мы будем использовать в дальнейшем такие простые задачи как были в первый раз. Прошедшая олимпиада была только разминкой. Лично Вам мы желаем удачи. Оперативности, с которой Вы решили все предложенные задачи, можно только позавидовать.

Алекс: Ну вот, а второго тура так и нет...

Arujuldizbek@mail.ru: вокруг считающего стоит N еловек, из которых выделен первый , а остольные занумерованы по часовой стрелке числами от 2 до N . считающии, начиная с кого то, ведет счет до М. человек на котором остоновился счет, выходит из круга. счет продолжается со следующего человека и до тех пор, пока не останется один человек. определить а) номер оставшегося человек. если известна М и то, что счет начинался с первого человека б) номер человека с которого начинался счет, если извесстно М и номер оставшегося человека L



полная версия страницы