- •Ответы на задачи с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
- •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;
- •If not exist then begin
- •Var podr: array[1..100] of integer;
- •I, k, p, count, n: integer;
- •If not exist then begin
- •Var podr: array[0..99] of boolean;
- •I, k, p, count, n: integer;
- •Var podr: set of 0..99;
- •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
- •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 s: string;
- •Var word: string;
- •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);
- •Var dm: array[1..12] of integer;
- •Val(Copy(s,1,p-1), c.No, k); { номер слева от пробела }
- •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; { вспомогательные переменные }
- •Val(Copy(s,1,I-1), c, r);
- •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;
- •Var X, count, c, c0, max, max2, max3, max6: integer;
- •Var X, Xprev, n, l, lMax: integer;
- •Var X, Xprev, Xstart, n, lMax: integer;
- •Var k: char;
- •Var I, sumFf: integer;
- •Var I, count1, count2, sumFf: integer;
- •Var I, j, count1, count2, sumFf: integer;
- •Var words: array[1..27] of string;
- •Var sum, p, I, j, n, number: integer;
- •Var j: integer;
- •Var sum, p, I, V, n,number: integer;
- •Var j: integer;
- •Var words: array[1..99] of string;
- •Var sum, I, j, n: integer;
- •Var count: array['a'..'z'] of integer;
- •Var s: string;
- •Var letters: array['a'..'z'] of char;
- •Var count: array['a'..'z'] of integer;
- •I: integer;
- •Var count: array[1..26] of integer;
- •I, k: integer;
- •Var count: array[1..26] of integer;
- •I, k: integer;
- •Var w: array[1..26] of structW;
- •I, k: integer;
- •Var count: array[1..26] of integer;
- •I, k, max: integer;
- •97 Http://kpolyakov.Narod.Ru
Var podr: set of 0..99;
или так:
var podr: set of byte;
Во втором случае в множество могу входить любые числа от 0 до 255.
Когда мы прочитали номер подразделения в переменную p, нужно проверить, входит ли это число во множество. Если входит, то ничего делать не требуется, а если не входит, нужно добавить его к множеству:
if not (p in podr) then begin
podr := podr + [p]; { добавить к множеству }
count := count + 1; { увеличить счетчик подразделений }
end;
Запись [p] обозначает множество из одного элемента, а знак «плюс» – объединение множеств. Кроме того, нужно увеличить счетчик подразделений count (поскольку нет простого способа сразу определить количество элементов множества).
var podr: set of 0..99;
p: byte;
i, k, N, count: integer;
c: char;
av: real;
begin
podr := [];
count := 0;
{ ввод исходных данных }
readln(N);
for i:=1 to N do begin
for k:=1 to 2 do
repeat read(c); until c = '-';
readln(p);
if not (p in podr) then begin
podr := podr + [p]; { добавить к множеству }
count := count + 1; { увеличить счетчик подразделений }
end;
end;
{ вывод результата }
av := N / count;
writeln(av:0:2);
end.
По-видимому, это решение действительно наиболее эффективно в данной конкретной задаче. Однако, нужно помнить, что в других аналогичных задачах такой подход часто не работает из-за существенных ограничений множеств:
число элементов множества не может быть больше 256;
элементами множества могут быть только числа от 0 до 255;
элементами множества не могут быть символьные коды, например, AB34a.
С учетом этого первое из рассмотренных решений является наиболее универсальным.
Эта задача имеет очень длинное условие, но решается довольно просто. Сначала нужно «вычленить» из условия и осознать существенные моменты:
нужные нам участники получили наибольший балл (если нет победителей) или второй по величине (если победители есть); участники с более низкими баллами нас не интересуют;
нам нужно хранить имя только одного из искомых участников, а не всех;
класс нас не интересует.
Таким образом, для решения задачи при вводе исходных данных достаточно определить:
количество участников, получивших высший балл, и имя одного из них;
количество участников, получивших второй по величине балл, и имя одного из них;
Важно понять, что здесь не нужно заводить массивы для хранения всех имен и результатов в памяти; строго говоря, сделать это невозможно, потому что количество участников по условию не ограничено. Также не нужна никакая сортировка.
Для хранения данных заведем три целочисленных массива, каждый из которых состоит из двух элементов:
Var ballBest: array[1..2] of integer; { результат (баллы) }
numBest: array[1..2] of integer; { количество }
nameBest: array[1..2] of string; { имена }
Первые элементы этих массивов относятся к тем, кто набрал наивысший балл, а вторые – к тем, кто набрал второй по величине балл.
Программа в целом выглядит так:
Var ballBest: array[1..2] of integer;
numBest: array[1..2] of integer;
nameBest: array[1..2] of string;
N: integer; { число участников }
c: char; { символ для ввода }