0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 5
1

Минимальное количество перемещений

20.11.2015, 12:19. Показов 1293. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
За один раз Вася может поменять местами два шампура. Помогите Васе подсчитать наименьшее количество перемещений шампуров.

Формат входных данных:

В первой строке задано одно натуральное число N (1 ≤ N ≤ 105). Во второй строке через пробел записаны N различных чисел — номера позиций, куда нужно переместить соответствующие шампура. Все номера являются натуральными числами, не превосходящими N.

Формат выходных данных:

Выведите минимальное количество перемещений.

Пример

4
1 4 3 2 => 1


5
4 2 1 3 5 => 2
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2015, 12:19
Ответы с готовыми решениями:

Выведите минимальное количество перемещений
3. Шашлыки Имя входного файла input.txt Имя выходного файла output.txt Максимальное время...

Количество перемещений в массиве
В первой строке записано целое положительное число n (1 ≤ n ≤ 100) —...

Найти количество перемещений первого элемента заданного массива
Помогите пожалуйста найти количество перемещений первого элемента Я не понимаю , как написать это...

Минимальное количество карандашей
Ученик имеет карандаши C цветов. Он хочет знать, какое минимальное количество карандашей надо...

1
5077 / 2649 / 2349
Регистрация: 10.12.2014
Сообщений: 10,024
23.11.2015, 07:38 2
Лучший ответ Сообщение было отмечено OlgaBoy как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
type
  aType = array [1..105] of Integer;
  
var
  v : array [1..10000] of record
    p, m1, m2 : Integer;
  end;
  n, count : Integer;
  a, r : aType;
 
procedure m(p : Integer);
begin
  if p = 0 then
    for var i := 1 to n do
      a[i] := i
  else
    begin
      count += 1;
      m(v[p].p);
      Swap(a[v[p].m1], a[v[p].m2]);
    end;
end;
 
function compare(a, r : aType);
begin
  Result := False;
  for var i := 1 to n do
    if a[i] <> r[i] then
      Exit;
  Result := True;
end;
 
begin
  reset(input, 'input.txt');
  n := readlninteger();
  for var i := 1 to n do
    r[i] := readinteger();
  
  var p := -1;
  var c := 0;
  repeat
    count := 0;
    p += 1;
    m(p);
    for var m1 := 1 to n-1 do
      for var m2 := m1+1 to n do
        begin
          c += 1;
          v[c].p := p;
          v[c].m1 := m1;
          v[c].m2 := m2;
        end;
  until compare(a, r);
  
  rewrite(output, 'output.txt');
  writeln(count);
end.

Может быть для больших n потребуется увеличить размер массива v на пару порядков…
0
23.11.2015, 07:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2015, 07:38
Помогаю со студенческими работами здесь

Вывести минимальное количество
Даны монеты номиналом 1, 2, 5, 10, 25, 50. Нужно написать программу, в которую вводится любое...

Минимальное количество массивов
Приветствую! Допустим, есть массив натуральных чисел длиной N, таких, что все они меньше...

Минимальное количество символов
Когда то давно мне добавили код, раньше работал. Сейчас не работает &lt;textarea...

Минимальное количество шагов
Всем доброго дня! Прошу натолкнуть на мысль как решать данную задачу. На вход дается 2 числа,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru