gnsnodir5001
?>

C++. разобраться с программой! дайте комментарий к каждой строке и команде к ней , опишите принцип действия. int comb(vector sort) { int n = 0; // количество перестановок double fakt = 1.2473309; // фактор уменьшения int step = sort.size() - 1; while (step > = 1) { for (int i = 0; i + step < sort.size(); ++i) { if (sort[i] > sort[i + step]) { swap(sort[i], sort[i + step]); n++; } } step /= fakt; } // сортировка пузырьком for (int i = 0; i < sort.size() - 1; i++) { bool swapped = false; for (int j = 0; j < sort.size() - i - 1; j++) { if (sort[j] > sort[j + 1]) { swap(sort[j], sort[j + 1]); swapped = true; ++n; } } if (! swapped) break; } return n; }

Информатика

Ответы

Людмила902
int comb(vector sort)
{
int n = 0; // количество перестановок
double fakt = 1.2473309; // фактор уменьшения
int step = sort.size() - 1;

while (step >= 1)
{
for (int i = 0; i + step < sort.size(); ++i)
{
if (sort[i] > sort[i + step])
{
swap(sort[i], sort[i + step]);
n++;
}
}
step /= fakt;
}
// сортировка пузырьком
for (int i = 0; i < sort.size() - 1; i++)
{
bool swapped = false;
for (int j = 0; j < sort.size() - i - 1; j++)
{
if (sort[j] > sort[j + 1]) {
swap(sort[j], sort[j + 1]);
swapped = true;
++n;
}
}

if (!swapped)
break;
}
return n;
}
ikavto6

A = [75, 31, 80, 40, 48, 40]  # любой список

# Готовые решения для этих задач:

print(sum(A))  # Сумма

# Произведение

A = [35, 2, 82, 10, 44, 42]

import functools

import operator  # содержит все возможные операции

print(functools.reduce(  # reduce - применить операцию ко всем элементам списка поочерёдно

       operator.mul,  #  операция умножения

       A))

# Через цикл

# Сумма:

S = 0

for i in A: S += i  # Сложить все элементы A, результатом будет переменная S

print(S)

# Произведение:

M = 1  # Если будет 0, то всё выражение тоже будет 0

for i in A: M *= i


# Или

if 0 in A: M = 0

else:

   for i in A: M *= i

print(M)

eeirikh

Первая строка описывает импорт функции permutations из модуля itertools. Теперь мы можем ее использовать.

Далее, конструкция ''.join(b) используется для преобразования кортежа/массива в строку. Например, у нас есть кортеж ('1','2','3') и мы хотим получить из него строчку '123'. Для этого нам надо пройтись по каждому элементу кортежа и присоединять(по-английски join) их к изначально пустой строке. Проход по каждому элементу кортежа в данном случае описан как "({присоединение} for b in {собственно сам кортеж})", где b - элемент кортежа. Теперь про то, что здесь используют в качестве кортежа: permutations - с англ. значит перестановки. То есть, условно, у нас есть слово КОТ, применяем permutations(КОТ) и получаем такие вариации как КОТ, КТО, ОКТ, ОТК, ТКО, ТОК (само слово тоже учитывается, как и в задании).

Однако функция permutations возвращает все эти варианты перестановок как кортежи, то есть, как ('К', 'О', 'Т'), ('К', 'Т', 'О') и т.д. Поэтому-то мы и используем join, чтоб получить из кортежей строки для удобной работы. Теперь стоит заметить, что при наличии в слове одинаковых букв в вариациях перестановок могут получиться совпадающие позиции, так как для компьютера перестановка, например, в слове "ЛОТО" второй и четвертой буквы "О" будет давать новую вариацию, а для нас это все еще будет то же слово ЛОТО, ведь были поменяны местами две одинаковые буквы. Для избежания этой проблемы стоит прописать перед всем массивом с перестановками функцию set, которая просто уберет из него повторяющиеся элементы.

В следующей строке мы создаем массив только из тех строк полученного нами ранее массива с перестановками, которые удовлетворяют условию задания, а именно: не имеют одинаковых соседних букв. Почему это прописано как "if "ОО" not in b"(если "ОО" не в b)? Все просто: в перестановке слова ОДЕКОЛОН две соседние буквы могут быть только ОО, ведь у других букв банально нет пары. В итоге мы проходимся по каждому элементу нашего кортежа с вариациями, и смотрим есть ли в очередной вариации подстроки с двумя буквами О подряд. Если нет - то добавляем в массив, если есть - пропускаем.

В третьей строке выводится количество элементов (len(сокращение length - англ. длина) для массива - кол-во элементов в нем) в полученном массиве, то есть количество вариантов перестановок, где нет слов с одинаковыми соседними буквами.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

C++. разобраться с программой! дайте комментарий к каждой строке и команде к ней , опишите принцип действия. int comb(vector sort) { int n = 0; // количество перестановок double fakt = 1.2473309; // фактор уменьшения int step = sort.size() - 1; while (step > = 1) { for (int i = 0; i + step < sort.size(); ++i) { if (sort[i] > sort[i + step]) { swap(sort[i], sort[i + step]); n++; } } step /= fakt; } // сортировка пузырьком for (int i = 0; i < sort.size() - 1; i++) { bool swapped = false; for (int j = 0; j < sort.size() - i - 1; j++) { if (sort[j] > sort[j + 1]) { swap(sort[j], sort[j + 1]); swapped = true; ++n; } } if (! swapped) break; } return n; }
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

musaevartur
pisikak999
Сухроб944
eizmaylova6
pifpaf85
ИвановнаВладимир1832
Программирование с++ надо решить
ibarskova1542
sergeykvik13
mishanay301csfp
karpov68
manyugina1
ivanovmk1977
reinish23
Анатольевич-Лариса
shakmeev