Придумать быстрый алгоритм для распределения элементов - C (СИ)
Формулировка задачи:
Задача:
Даны элементы массива: 1 2 3 4 5 6 7 8 9 0 0 0
вместо 1..9 могут быть любые элементы...
В этом массиве 12 элементов, тогда на каждые 3 элемента приходится 1 нуль.
Если бы массив состоял из 15 элементов, то тогда на каждые 4 элемента приходился бы 1 нуль
И так далее, думаю, логику поняли
Цель:
Превратить массив 1 2 3 4 5 6 7 8 9 0 0 0 в 1 2 3 0 4 5 6 0 7 8 9 0
Или обобщенно:
Массив из n элементов, в котором обязательно присутствуют k нулей в конце, (n-k) mod k = 0
превратить в:
Массив из n элементов с k нулями, в котором после каждого k элемента стоит 1 нуль, (n-k) mod k = 0
Использовать вспомогательный массив запрещено
извиняюсь, почему-то получилось создать 2 темы, удалите тему, которая находится ниже (раньше появилась по времени)
Решение задачи: «Придумать быстрый алгоритм для распределения элементов»
textual
Листинг программы
int main() { // int a[12]={1,2,3,0,0,0,0,0,0,0,0,0}; int a[12]={1,2,3,4,5,6,7,8,9,0,0,0}; int i,j,h,w,l,t; h = 3; w = 3; l = sizeof(a)/4; for(j=1; j < h; j++) { t = j*w+(j-1); for(i=h*w+(j-1); i >= t; i--) { a[i]=a[i-1]; } a[i+1] = 0; } for(i=0; i < l; i++) { printf("%d ",a[i]); } return 0; }
Объяснение кода листинга программы
В этом коде выполняется распределение элементов в массиве a. Список действий:
- Создается массив a размером 12 и заполняется значениями {1,2,3,4,5,6,7,8,9,0,0,0}.
- В коде пронумерованы следующие переменные: i = 1, j = 2, h = 3, w = 3, l = 4, t = 5. Значения переменных: h = 3, w = 3, l = 4, t = 5.
- В цикле j выполняется 2 раза: j = 1 и j = 2. В каждом из этих двух случаев выполняется цикл i, который выполняет 6 раз: i = 1, i = 2, i = 3, i = 4, i = 5, i = 6. В каждом из этих шести случаев выполняется: a[i] = a[i-1], то есть значение a[1] становится равным a[0], a[2] становится равным a[1] и так далее до a[6] = a[5]. a[i+1] = 0, то есть после каждой шестерки элементов, следующий элемент (в данном случае это 0) добавляется в конец массива. Таким образом, после первого прохода циклов, массив a будет иметь вид {1,2,3,0,0,0,0,0,0,0,0,0}. После второго прохода циклов, массив a будет иметь вид {1,2,3,0,0,0,0,0,0,0,0,4}.
- Затем выполняется цикл i, который выполняет 4 раза: i = 0, i = 1, i = 2, i = 3.
В каждом из этих четырех случаев выполняется printf(
%d
,a[i]), то есть выводятся значения элементов массива a. Результат: 1 2 3 0 0 0 0 0 0 0 0 4. - Код завершается, и возвращается 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д