Вниз  Алгоритмизация
- 17.12.2015 / 15:40
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Ну условие вроде не сложное, просто сгенерировать последовательность, сумма чисел которой будет равна n, при том, что на каждом шаге мы можем прибавлять от 1 до k включительно.

Вот ещё примеры:
in: n = 10, k = 3
out:
3 3 3 1
3 3 2 2
2 2 2 2 2
1 2 3 3 1
1 1 1 1 1 1 1 1 1 1
и т.д., тут много можно комбинаций составить

in: n = 4, k = 1
out: 1 1 1 1

in: n = 3, k = 3
out:
1 1 1
1 2
2 1

Надеюсь, я понял правильно задание, а то только запутаю :-D

Пройтись в цикле, контролируя сумму.
__________________
 let live

Изменено aNNiMON (17.12 / 15:41) (всего 1 раз)
- 17.12.2015 / 16:19
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Так, эта задача сводиться к перебору всех чисел меньше k, дающих в сумме n, в случае если он прыгает только с начальной клетки и только в одну сторону? Поскольку в твоём условии могут и быть такие варианты:
+2,-1,... И так до бесконечности.

Задача о сумме подмножеств...
 
  public int N,K;
public void F(int v, int s){
  s+=v;
  if (s!=N) System.out.print(s+" ");
  else {
  System.out.println(s);
  return;
  }
  for(int i=v;i<=K;i++)F(i,s);
}


  main(){
  F(1,0);
  }

  Правда код написан на коленке и я не уверен... Проверьте пожалуйста.
- 17.12.2015 / 16:21
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
aNNiMON, да где в этом условие говориться, что должна быть сумма всегда равна эн. Не знаю, но мне это условие как сингулярность черной дыры - нифига не понятно. Но по ауту я думал , что надо перебрать все комбины с числами К, 1 и 0, но так понял не все так просто. Числа должны быть от 0 до К. Но блин, где такое сказано, сказали, что кенгуру прыгает на К клеток, все. Ну кароче не та у меня логика
- 17.12.2015 / 16:42
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Dinisimys, короче, я убрал все ошибки:

  //Примерное решение на java

public void F(int v, int s){
    s+=v;
    if (s!=N) System.out.print(s+" ");
    else {
    System.out.println(s);
    return;
    }
    for(int i=1;i<=K;i++)F(i,s);
}

  public static int N,K;

  main(){//Типа точка запуска
  for(int i=1;i<=K;i++)F(i,0);
  }

  Берётся начальная точка в цикле и из неё шагаем поочерёдно на расстояние v, до тех пор пока вес s, не станет равным N. Короче, это более менее сильно мне напоминает разветвляющееся дерево, части которого перебираются в рекурсивном цикле. Отображаються все обрезанные ветви, которые если пройти от начала и суммировать все встречающиеся узлы v, то получиться N.

  В общем, я не знаю что это за печенька и не знаю как она работает и работает ли вообще. Сам проверяй.
- 17.12.2015 / 17:12
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Упс... Ещё одна ошибка.
  1. public void F(int v, int s){
  2.  if(s>N)return;
  3.     s+=v;
  4.     if (s!=N) System.out.print(s+" ");
  5.     else {
  6.       System.out.println(s);
  7.       return;
  8.     }
  9.     for(int i=1;i<=K;i++)
  10.        F(i,s);
  11. }
  12.  
  13.   public static int N,K;
  14.  
  15.   main(){//Типа точка запуска
  16.      for(int i=1;i<=K;i++)   F(i,0);
  17.   }


Изменено aNNiMON (17.12 / 18:02) (всего 2 раза)
- 17.12.2015 / 17:30
Oak
  Пользователь

Oak 
Сейчас: Offline
Askalite, убирай весь код в специальный тег code. Он есть на панельке. Буду банить.

Длинные коды также убирай под спойлер.
__________________
 Эль Презеденте
- 17.12.2015 / 17:39
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
Askalite, Протестировал код, выдало просто
1 2 3 4 5 6
для Н=5, К=2
- 17.12.2015 / 18:22
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Вот набросал. http://ideone.com/I4s3hX
Но ещё реверсы нужны.
Открыть спойлер

__________________
 let live

Изменено aNNiMON (17.12 / 18:24) (всего 1 раз)
- 17.12.2015 / 18:33
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
Открыть спойлер
Код на яваскрипте. Почему не пашет? тестировал через телефоне на jsfiddle, ничего не выводит. Подскажите

Изменено Dinisimys (17.12 / 18:35) (всего 1 раз)
- 17.12.2015 / 20:01
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Вот как-то так.

Открыть спойлер

Наверх  Всего сообщений: 127
Фильтровать сообщения
Поиск по теме
Файлы топика (2)