Придумать быстрый алгоритм для распределения элементов - 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. Список действий:

  1. Создается массив a размером 12 и заполняется значениями {1,2,3,4,5,6,7,8,9,0,0,0}.
  2. В коде пронумерованы следующие переменные: i = 1, j = 2, h = 3, w = 3, l = 4, t = 5. Значения переменных: h = 3, w = 3, l = 4, t = 5.
  3. В цикле 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}.
  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.
  5. Код завершается, и возвращается 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы