– Придёт день, и вы столкнетесь с ситуацией, к которой окажетесь полностью неподготовлены как физически, так и эмоциально. Тогда вы и узнаете, какие из вас врачи, насколько вы подвержены страху и как хорошо вы выучились.
Лекция одного преподавателя на Риннале
Джо Шрайбер, "Звёздные Войны: Солдаты Смерти"





Сколько глобус ни крути, там Fess-Style не найти...
Сайт Fess'a » Пример решения C4 "Олимпиадный уровень" - Форум
[ Новые сообщения · Участники · Правила форума · Поиск ]
Страница 1 из 11
Форум » Программирование » Паскаль » Пример решения C4 "Олимпиадный уровень"
Пример решения C4 "Олимпиадный уровень"
FessДата: Вторник, 14.05.2013, 15:06 | Сообщение # 1

Добрый админ
Сообщений: 2338
Статус:
Пример решения С4, задачи так называемого "Олимпиадного класса".
На удивление данная задачка решается очень просто.

Язык: Паскаль
Программа: Алго, интерпретатор паскаля.

Текст задания: С клавиатуры вводится любая последовательность букв и цифр, оканчивающаяся нулём, который в записи один (на конце то бишь). Необходимо найти все цифры, из которых состоит строка, составить из них минимально возможное число и трижды вывести эту последовательность на экран. В случае невозможности составления такого числа программа должна вывести "NO" (например, если в введенной строке нет ни одного числа).

Код
program bb;
var
st,num: string;
i,h,x,y:integer;
R:array [0..30] of integer;

begin
x:=0;
h:=0;
readln(st);

for I:=1 to 9 do
    begin
    str(i,num);
    x:=pos(num,st);
    if x<>0 then     
      begin
       h:=h+1;    
       R[h]:=x;
      end;
    end;

for x:=1 to 3 do
    begin
     for H:=1 to H do
      begin
       write(st[R[h]]);
      end;
    end;

if H=0 then writeln('NO');
end.
 
FessДата: Вторник, 14.05.2013, 15:23 | Сообщение # 2

Добрый админ
Сообщений: 2338
Статус:
А вот дополненный вариант, который не считает числа после нуля (по условию оговаривается что последний в строке ноль, поэтому в первом варианте я проверку на ноль опустил, но вдруг экзаменатор захочет схитрить? А мы ему не дадим)

В этом варианте первоначально записывается позиция нуля в строке, а потом позиции всех чисел сравниваются с позицией нуля (если позиция цифры меньше позиции нуля, значит все ок, иначе - отсекается)

Код
program bb;
var   
st,num: string;
i,h,x,y,zero:integer;
R:array [0..30] of integer;

begin
x:=0;
h:=0;
readln(st);

zero:=pos('0',st);

for I:=1 to 9 do
   begin
   str(i,num);
   x:=pos(num,st);
   if ((x<>0)AND(x<zero)) then    
     begin
      h:=h+1;   
      R[h]:=x;
     end;
   end;

for x:=1 to 3 do // сколько раз дублировать ответ
   begin
    for H:=1 to H do
     begin
      write(st[R[h]]);
     end;
   end;

if H=0 then writeln('NO');
end.
 
Форум » Программирование » Паскаль » Пример решения C4 "Олимпиадный уровень"
Страница 1 из 11
Поиск: