- •Ответы на задачи с4:
- •Var tMonth: array[1..12] of real;
- •I, month: integer;
- •Var count: array[1..26] of integer;
- •Var count:array[1..26] of integer;
- •I, k, cA, cAm, iMax:integer;
- •Var count: array ['a'..'z'] of integer;
- •Var Info: array[1..100] of record
- •Var Info: array[1..100] of record
- •I, k, p, n, c: integer;
- •Var Info: array[1..Lim] of record
- •I, k, n, mark, max: integer;
- •Var names: array[1..Lim] of string;
- •I, k, n, ball, mark, max, count: integer;
- •Var Info: array[1..Lim] of record
- •I, k, n, mark, max1, max2, max3: integer;
- •Var name: array[1..Lim] of string;
- •I, k, count, mark1, mark2, n: integer;
- •Var podr: array[1..100] of integer;
- •Var podr: array[0..99] of boolean;
- •I, k, p, count, n: integer;
- •Var ballBest: array[1..2] of integer; { результат (баллы) }
- •Var ballBest: array[1..2] of integer;
- •I, j, k, ball: integer; { вспомогательные переменные }
- •Var Best: array[1..2] of record
- •I, j, k, ball: integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •I, j, k, price: integer;
- •Var Total: array[0..Max] of integer;
- •Var Count: array[0..Max,7..11] of integer;
- •I, j, class, ball, minBall, Sum: integer;
- •Var List: array[1..500] of string;
- •Var List: array[1..500] of string;
- •I, j, n, ball1, ball2, count: integer;
- •Var List: array[1..500] of string;
- •I, j, n, ball1, ball2, count: integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •I, j, k, price: integer;
- •Var count: array[1..26] of integer;
- •Var count: array['a'..'z'] of integer;
- •Inc(nOdd);
- •Var count: array['a'..'z'] of integer;
- •I, nOdd: integer;
- •Inc(nOdd);
- •Var Info: array[1..1000] of tInfo;
- •Var temp: tInfo;
- •Var Info: array[1..1000] of tInfo;
- •Var h, m, code0: integer;
- •Var Info: array[1..1000] of tInfo;
- •Var Info: array[1..1000] of tInfo;
- •Var h, m, code0: integer;
- •If c in ['a'..'z', 'a'..'z'] then ...
- •If c in['a'..'z','a'..'z'] then
- •If s[I] in ['a'..'z','a'..'z'] then begin
- •Var Names: array[1..Max] of string;
- •Var count: array[1..Max] of integer;
- •Var nParties: integer;
- •Var Names: array[1..Max] of string;
- •Var Parties: array[1..Max] of tParty;
- •Var Parties: array[1..Max] of tParty;
- •Val(Copy(s,1,2), d, c);
- •Val(Copy(s,4,2), m, c);
- •Val(Copy(s,7,4), y, c);
- •Var s, Name, minName: string;
- •Val(Copy(s,1,2), d, c);
- •Val(Copy(s,4,2), m, c);
- •Val(Copy(s,7,4), y, c);
- •Var s, Name, specDate, minName, minDate: string;
- •Var name,name1,name2:string;
- •I, j, n, school, ball,
- •Var sum, count: array[1..99] of integer;
- •Var sum, count: array[1..99] of integer;
- •I, n, sch, ball, k, total: integer;
- •If s[I] in ['a'..'z','a'..'z'] then
- •If inside then begin
- •Var count:array[0..100] of integer;
- •I, n, sch, ball, m, s: integer;
- •Var c: char;
- •I, k, count: integer;
- •Var c, I: char;
- •Var c: char;
- •I, j, k: integer;
- •Var c:char;
- •I, j, k:integer;
- •Var num: array['0'..'9'] of integer;
- •I, min: integer;
- •Var c: char;
- •I, k, count: integer;
- •Var c, I: char;
- •Var c: char;
- •Var num: array['1'..'9'] of integer;
- •Var num: array['1'..'9'] of integer;
- •Val(Copy(s,1,2), d, I);
- •Val(Copy(s,4,2), m, I);
- •Var maxStip: array[1..5] of integer;
- •Var I, k, n: integer;
- •Var first: array[1..5] of integer;
- •Var I, n, kurs, stip: integer;
- •Var people: array[1..Max-1] of integer;
- •Var Delta: array[1..Max] of integer;
- •Var Delta: array[1..Max] of integer;
- •I, s1, s2, n, p, min: integer;
- •Var people: array[1..Max-1] of integer;
- •I, j, s1, s2, n, p, min: integer;
- •Var schMax, schCount: array[1..Max] of integer;
- •Var schMax, schCount: array[1..Max] of integer;
- •I, n, sch, ball, count: integer;
- •Var f: Text; { указатель на текстовый файл }
- •X1, x2: real; { корни уравнения }
- •I, r: integer; { вспомогательные переменные }
- •Var Info: array[1..Max] of tInfo;
- •Var Info: array[1..Max] of tInfo;
- •I, j, n, zNo: integer;
- •Var count: array[1..Max] of integer;
- •Var count: array[1..Max] of integer;
- •I, j, nMin, n, zNo: integer;
- •Var Info: array[1..Max] of tInfo;
- •I, j, n, k: integer;
- •76 Http://kpolyakov.Narod.Ru
Var count:array[0..100] of integer;
c: char;
I, n, sch, ball, m, s: integer;
begin
{ обнуляем массив }
for i:=0 to 100 do count[i]:=0;
{ читаем количество строк}
readln(N);
for i:=1 to N do begin
{ пропускаем фамилию и имя}
repeat read(c) until c=' ';
repeat read(c) until c=' ';
readln(sch,ball); { читаем номер школы и балл ученика}
count[ball]:=count[ball]+1;
end;
M := N div 5; {вычисляем 20% от количества учеников}
{ ищем минимальный балл этих 20% }
s := 0;
i:=101;
while s < M do begin
i:=i-1;
s:=s+count[i];
end;
{ вывод результата }
if (s = M) or (s = count[i]) then
{ i баллов – «отлично» }
writeln (i)
else begin
{ i баллов – не «отлично» }
repeat
i:=i+1;
until count[i]<>0;
writeln(i);
end;
end.
-
Во-первых, нас интересуют только цифры, остальные символы можно просто пропускать. Во-вторых, предполагается, что текст может быть достаточно длинный, так что читать его в массив (или строку) не нужно – в этом случае получится неоптимальная программа. Фактически для ответа на вопрос задачи нам нужно знать только количество цифр, поэтому достаточно выделить в памяти массив счетчиков с индексами от 0 до 9 и считать цифры:
num: array[0..9] of integer;
Кроме того, нам нужно узнать, есть ли в строке хотя бы одна цифра (чтобы вывести ответ «Да» или «Нет»). Для этого во время чтения будем считать найденные цифры в переменной count. В начале программы счетчики нужно обнулить:
for i:=0 to 9 do num[i] := 0;
count := 0;
При чтении проверяем очередной символ так: если его код находится между кодом цифры ‘0’ (код 48) и цифры ‘9’ (код 57), то это цифра. Так можно делать, потому что цифры во всех кодовых страницах стоят последовательно, одна за другой. Вот полный цикл чтения до точки:
repeat
read(c);
if ('0' <= c) and (c <= '9') then begin
k := Ord(c) - Ord('0');
num[k] := num[k] + 1;
count := count + 1;
end;
until c = '.';
Здесь используется цикл repeat, потому что хотя бы один символ необходимо прочитать. Чтобы найти номер нужного счетчика k, вычисляем разность между кодами прочитанного символа и цифры '0'.
Чтобы при выводе получилось максимальное число, нужно сначала выводить все девятки (их количество записано в num[9]), затем все восьмерки и т.д. до нуля:
for i:=9 downto 0 do
for k:=1 to num[i] do write(i);
Здесь используется оператор write, который не переходит на новую строку и выводит все цифры в одной строке.
Осталась одна проблема: если в строке есть только нули, нужно вывести только один ноль. Состояние «цифры есть, но все они – нули» записывается в виде условия
if (count = num[0]) and (num[0] > 0) then
num[0] := 1;
в этом случае в счетчик нулей записываем единицу. После этого будет выведен только один нуль.
Вот полная программа:
program qq;
Var c: char;
num: array[0..9] of integer;
I, k, count: integer;
begin
{ обнулить счетчики }
for i:=0 to 9 do num[i] := 0;
count := 0;
{ читаем последовательность }
repeat
read(c);
{ если цифра, увеличили счетчик }
if ('0' <= c) and (c <= '9') then begin
k := Ord(c) - Ord('0');
num[k] := num[k] + 1;
count := count + 1;
end;
until c = '.';
{ если только нули }
if (count = num[0]) and (num[0] > 0) then
num[0] := 1;
{ вывод результата }
if count = 0 then
writeln('Нет')
else writeln('Да');
for i:=9 downto 0 do
for k:=1 to num[i] do write(i);
end.
Возможно еще одно аналогичное решение, где индексы у массива – символьные: