Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {В текстовом файле записан набор натуральных чисел, не превышающих 109.
- Гарантируется, что все числа различны. Необходимо определить, сколько в наборе
- таких пар чётных чисел, что их среднее арифметическое тоже присутствует в файле,
- и чему равно наибольшее из средних арифметических таких пар. Первая строка
- входного файла содержит целое число N — общее количество чисел в наборе.
- Каждая из следующих N строк содержит одно число.
- В ответе запишите два целых числа:
- сначала количество пар, затем наибольшее среднее арифметическое.
- Репетитор IT mentor vk.com/itmentor
- }
- // Вывод : 15 и 976339247
- program p27;
- uses crt, Utils;
- type TArray = array[1..5000] of integer;
- var f : text;
- N : integer;
- k : integer;
- t : integer;
- p : integer;
- x : TArray;
- current : integer;
- count_pair : integer;
- max_average : integer;
- average : integer;
- //Для замера времени выполнения
- start_time : integer;
- time_execution : integer;
- procedure sort(var ar : TArray; N : integer);
- var index_out, index_in, cursor : integer;
- template : integer;
- begin
- for index_out := 1 to N do begin
- cursor := N - index_out;
- for index_in := 1 to cursor do
- if( ar[index_in] > ar[index_in + 1] ) then begin
- template := ar[index_in + 1];
- ar[index_in + 1] := ar[index_in];
- ar[index_in] := template;
- end;
- end;
- end;
- //Бинарный поиск в массиве
- function bin_search( ar : TArray; N : integer; element : integer) : boolean;
- var middle, index_start, index_end : integer; is_find : boolean;
- begin
- is_find := false;
- index_start := 1; index_end := N;
- while( index_start <= index_end ) do begin
- middle := (index_start + index_end) div 2;
- if((element = ar[index_start]) or (element = ar[index_end])) then begin
- is_find := true; break;
- end;
- if( element < ar[middle] ) then
- index_end := middle - 1
- else if ( element > ar[middle] ) then
- index_start := middle + 1
- else begin is_find := true; break; end;
- end;
- result := is_find;
- end;
- begin
- start_time := Milliseconds;
- //Считывание N элементов из файла
- Assign(f, '26.txt'); Reset(f); readln(f, N);
- for k := 1 to N do begin
- readln(f, current );
- x[k] := current;
- end;
- Close(f);
- // Сортировка полученного массива
- sort(x, N);
- max_average := 0;
- count_pair := 0;
- for k := 1 to N do begin
- if( x[k] mod 2 = 0) then
- for t := k + 1 to N do
- if( x[t] <> x[k] ) and ( x[t] mod 2 = 0) then begin
- average := (x[t] + x[k]) div 2;
- //Поиск среднего арифметического в наборе
- if( bin_search(x, N, average) = true ) then
- begin //если найдено
- inc(count_pair);
- if( average > max_average ) then max_average := average;
- break;
- end;
- end;
- end;
- time_execution := (Milliseconds - start_time) div 1000;
- writeln(' Количество пар из четных чисел, ср.ариф. которых есть в наборе: ', count_pair);
- writeln(' Наибольшее среднее арифметическое: ', max_average);
- writeln;
- writeln('Время выполнения = ', time_execution div 60,' мин ', time_execution mod 60,' сек');
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement