Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет qwerty ([info]qwerty)
@ 2010-01-24 17:11:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Задачка

Есть одномерный массив целых. В начале его расположен массив A длиной a, в конце B длиной b, а посредине не интересующий нас мусор длиной c. Требуется красивым образом переместить B в начало, за ним расположить A, причем сделав при этом не более a+b чтений и записей в массив. Судьба мусора не интересует. Файлы, посторонняя память и рекурсия категорически отсутствуют.


(Читать комментарии) - (Добавить комментарий)

Re: А в чём трудность-то ?
[info]qwerty
2010-01-26 00:10 (ссылка)
Первое же присваивание первого же цикла невозвратимо затирает последний элемент массива A.

Насчет же места хранения значений a, b, c, переменных цикла, временных значений при вычислении выражений, локалов и проч, если настолько хочется зангудства, то вот.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: А в чём трудность-то ?
[info]tristes_tigres
2010-01-27 10:43 (ссылка)
Ну тогда
void
swap(int a, int b, int c, int x[])
{
  int k, m;
  int d;
  int v, w;
  int indx, key;
  
  d = gcd(a + b + c, b);
  
  for(k = 0; k < d; k++) {
    v = x[k];
    key = 1;
    for(m = 1; m <= (a + b + c)/d; m++) {
      indx = (k + m*b)%(a + b + c);
      if( (indx < a) || (indx >= a + c)) {
	w = x[indx];
      } 
      if (key == 1) {
	x[indx] = v;
      }
      v = w;
      if( (indx < a) || (indx >= a + c)) {
	key = 1;
      } else {
	key = 0;
      }
    }
  }

}

int 
gcd(int a, int b)
{
  int t;
  
  if (b > a) {
    t = b;
    b = a;
    a = t;
  }
  while (b != 0) {
    t = b;
    b = a%b;
    a = t;
  }
  return a;
}

(Ответить) (Уровень выше)


(Читать комментарии) -