Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C],Перечислить все представления положительного целого числа

34K
01 марта 2008 года
IvanBOSS
6 / / 01.03.2008
Ребята привет есть такая задача: Перечислить все представления положительного целого числа n в виде суммы последовательности невозрастающих целых положительных слагаемых; что тут делать?
337
01 марта 2008 года
shine
719 / / 09.06.2006
 
Код:
def items(b)
  return (1..(b - 1)).inject([]) {|s, i| s + items(b - i).collect{|j| ( + j).sort}}.sort
end

p items(5).uniq.reverse
34K
01 марта 2008 года
IvanBOSS
6 / / 01.03.2008
Если можно, то пожалуйста листинг на Си.

[COLOR="Red"]Cразу,в названии темы указывай язык программирования,чтоб избежать недоразумений и не нарушать Правила раздела Студентам.[/COLOR] модератор.
36K
02 марта 2008 года
Trilobit
6 / / 21.02.2008
Задача тривиально решается при помощи рекурсии.

Код:
#include <stdio.h>
#include <stdlib.h>

// Слагаемое
struct Item {
   int n;
   struct Item *next;
   struct Item *prev;
};

// Распечатать все представления числа N,
// такого что N=n+(сумма все слагаемых в списке sum).
// т.е. sum - частичное представление числа N, а n - еще
// не разложенный остаток.
void numberRep (int n, Item *sum)
{
  if (!n) {
    Item *r;
    char *sep="";
    for (r=sum; r; r=r->next==sum? 0: r->next) {
      printf ("%s%d", sep, r->n);
      sep="+";
    }
    printf ("\n");
    return;
  }

  Rep *r=(Rep*)malloc(sizeof *r);
  if (sum) {
    r->next=sum;
    (r->prev=sum->prev)->next=r;
    sum->prev=r;
  } else r->next=r->prev=r;

  for (int i=n; i>0; i--) {
    r->n=i;
    numberRep (n-i, r);
  }

  if (sum) {
    r->prev->next=sum;
    sum->prev=r->prev;
  }

  free (r);
}

int main(int argc, char **argv)
{
  numberRep (10, 0);
}


Заодно это и пример работы с двусвязанным списком.
34K
03 марта 2008 года
IvanBOSS
6 / / 01.03.2008
Trilobit, спасибо, но что такое Rep.
Как понимать строку:
Rep *r=(Rep*)malloc(sizeof *r);
34K
04 марта 2008 года
IvanBOSS
6 / / 01.03.2008
Ребята, вопрос не закрыт!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог