В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
BeautifulGirl001
BeautifulGirl001
03.03.2022 08:12 •  Информатика

C/C++. В текстовом файле хранится последовательность целых чисел. Вывести в порядке убывания те числа, которые встречаются в последовательности только один раз. Использовать для решения задачи бинарное дерево. Для решения задачи создать функции: ввод с клавиатуры [или генерация случайных] чисел и запись в файл; чтение неупорядоченных чисел из файла и вывод на экран; создание бинарного дерева (каждая вершина дерева содержит число и счетчик повторений числа); вывод содержимого дерева на экран.

Показать ответ
Ответ:
tatianani
tatianani
06.01.2023 11:12
Const
n=10;m=7;
var
a:array[1..n,1..m]of integer;
i,j,min,s,j_m:integer;
     begin     
         for i:=1 to n do         
               begin             
                  writeln;                     
                     for j:=1 to m do                         
                          begin                               
                              a[i,j]:=random(20)-5;                             
                              write(a[i,j]:4);                         
                          end;       
                end;         
writeln;  
{запишем в min чуть больше наибольшего значения суммы, которая может быть в любом столбце. Больше, чем 200 не будет, т.к. всего 10 строк, каждое значение исходя из заполнения матрицы не может быть больше, чем 15 }
min:=200;j_m:=1;
            for j:=1 to m do         
                begin             
                    s:=0;                   
                       for i:=1 to n do                     
                            s:=s+a[i,j];                   
                               if s<min then                     
                                    begin                           
                                       j_m:=j;                         
                                       min:=s;                     
                                    end;             
                              writeln('j :',j,' ',s);  {выводится значение суммы в каждом столбце, необязательно, можно удалить}       
                 end;         
writeln('№ столбца с мин суммой ',j_m);     
     for i:=1 to n do         
            writeln(a[i,j_m]); {вывод нужного столбца}
end.                           
0,0(0 оценок)
Ответ:
LOSS903903
LOSS903903
29.01.2021 06:48
Const
  n = 20; { размер массивов }
  p=0; { минимальное значение элемента }
  q=15; { максимальное значение элемента }
type
  V=array[1..n] of integer;

procedure VInit(var a:V; s:string);
{ процедура заполняет элементы массива a
  случайными значениями из интервала [p;q].
  Элементы сформированного массива выводятся
  с заголовком, в который добавляется значение s }
var
  i,kol:integer;
begin 
  kol:=q-p+1;
  Writeln('Элементы массива ',s);
  for i:=1 to n do
  begin a[i]:=Random(kol)+p; Write(a[i],' ') end;
  Writeln
end;

procedure SortBubble(var a:V);
{ сортировка методом пузырька }
var
  i,j,t:integer;
begin
  for i := 1 to n-1 do
    for j := 1 to n-i do
      if a[j] > a[j+1] then
      begin t := a[j]; a[j] := a[j+1]; a[j+1] := t end
end;

procedure VOut(var a:V;s:string);
{ Элементы массива a выводятся с заголовком s }
var
  i:integer;
begin 
  Writeln(s);
  for i:=1 to n do Write(a[i],' ');
  Writeln
end;

function BinSearch(var a:V;key:integer):boolean;
{ двоичный поиск элемента со значением key в массиве a
  Возвращает true, если элемент найден и false, если нет }
var
  li,ri,mi:integer;
begin
  li:=1; ri:=n;
  while li<ri do begin
    mi:=(li+ri) div 2;
    if a[mi]<key then li:=mi+1 else ri:=mi;
  end;
  BinSearch:=(a[ri]=key)
end;

var
  a,b,c:V;
  i,ai1,s:integer;
  found:boolean;
begin
  Randomize;
  VInit(a,'A'); SortBubble(a); VOut(a,'Отсортированный массив A');
  VInit(b,'B'); SortBubble(b); VOut(b,'Отсортированный массив B');
  VInit(c,'C'); SortBubble(c); VOut(c,'Отсортированный массив C');
  s:=0; found:=false;
  for i:=1 to n do
  begin
    if found then
      if a[i]=ai1 then Inc(s,ai1)
      else found:=false;
    if not found then begin
      found:=BinSearch(b,a[i]);
      if found then found:=BinSearch(c,a[i]);
      if found then begin ai1:=a[i]; Inc(s,ai1) end
    end
  end;
  Writeln('Искомая сумма равна ',s);
end.

Тестовое решение:
Элементы массива A
4 10 6 4 12 5 5 15 0 14 2 2 0 3 14 1 11 13 3 9
Отсортированный массив A
0 0 1 2 2 3 3 4 4 5 5 6 9 10 11 12 13 14 14 15
Элементы массива B
7 3 13 3 10 11 3 15 12 10 0 5 5 15 13 1 15 9 1 5
Отсортированный массив B
0 1 1 3 3 3 5 5 5 7 9 10 10 11 12 13 13 15 15 15
Элементы массива C
4 10 5 8 14 15 8 14 12 4 12 12 3 11 4 0 12 2 10 0
Отсортированный массив C
0 0 2 3 4 4 4 5 8 8 10 10 11 12 12 12 12 14 14 15
Искомая сумма равна 64
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота