Вывести на экран все представления натурального числа n в виде суммы k натуральных слагаемых - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <conio.h>
#define Min( a, b ) ( ((a) < (b)) ? (a) : (b) )
#define MaxInt 32767;
int N,a[1000];
void output(int count);
void p(int k,int summ);
int main(int argc, char* argv[])
{
        a[0]=MaxInt;
        scanf("%i",&N);
        p(1,0);
        getch();
        return 0;
}
void output(int count)
{
        int i;
        printf("%i",a[1]);
        for(i=2;i<=count;i++)
                printf("+%i",a[i]);
        printf("\n");
}
void p(int k,int summ)
{
        int i;
        if ((summ==N)&&(k>2)) output(k-1);
        if (summ<N){
                for(i=1;i<=Min(N-summ,a[k-1]);i++){
                a[k]=i;
                p(k+1,summ+i);
                }
        }
}
У меня есть задача вона виводить на экран все представления натурального числа n в виде суммы натуральных слагаемых.Мне нужно что-б оно выводила на экран все представления натурального числа n в

виде суммы k натуральных

слагаемых.КАК ЕТО СДЕЛАТЬ?

Решение задачи: «Вывести на экран все представления натурального числа n в виде суммы k натуральных слагаемых»

textual
Листинг программы
 void F(int n, int k)
{
  if (k < 1 || n < 1) ;
  else if (k==1) printf("+%d\n", n);
  else {
    for(i=1; i<n-k) i++) {
      printf("+%g", i);
      F(n-i, k-1);
    }
  }
}
main()
{ 
  F(10,5);
}

Объяснение кода листинга программы

  1. В функции F проверяется, если k меньше 1 или n меньше 1, то ничего не происходит.
  2. Если k равно 1, то выводится на экран n с знаком +.
  3. В противном случае, в цикле for начинающемся с i=1 и выполняющемся до i<n-k (поскольку при каждом вызове функции F значение n уменьшается на i, а значение k уменьшается на 1) выводится на экран i с знаком +, после чего вызывается функция F с аргументами n-i и k-1.
  4. В функции main вызывается функция F с аргументами 10 и 5.
  5. Значение n равно 10, а значение k равно 5.
  6. При выполнении функции F в первом случае (когда k меньше 1 или n меньше 1) ничего не происходит.
  7. Во втором случае (когда k равно 1) выводится на экран 10 с знаком +.
  8. В третьем случае (когда k больше 1) в цикле выводится на экран 1, 2, 3, 4, 5, 6, 7, 8, 9 с знаком +, после чего вызывается функция F с аргументами 9 и 4.
  9. При выполнении функции F в первом случае (когда k меньше 1 или n меньше 1) ничего не происходит.
  10. Во втором случае (когда k равно 1) выводится на экран 9 с знаком +.
  11. В третьем случае (когда k больше 1) в цикле выводится на экран 4, 3, 2, 1 с знаком +, после чего вызывается функция F с аргументами 6 и 3.
  12. При выполнении функции F в первом случае (когда k меньше 1 или n меньше 1) ничего не происходит.
  13. Во втором случае (когда k равно 1) выводится на экран 6 с знаком +.
  14. В третьем случае (когда k больше 1) в цикле выводится на экран 3, 2, 1 с знаком +, после чего вызывается функция F с аргументами 4 и 2.
  15. При выполнении функции F в первом случае (когда k меньше 1 или n меньше 1) ничего не происходит.
  16. Во втором случае (когда k равно 1) выводится на экран 4 с знаком +.
  17. В третьем случае (когда k больше 1) в цикле выводится на экран 2, 1 с знаком +, после чего вызывается функция F с аргументами 3 и 1.
  18. При выполнении функции F в первом случае (когда k меньше 1 или n меньше 1) ничего не происходит.
  19. Во втором случае (когда k равно 1) выводится на экран 3 с знаком +.
  20. В третьем случае (когда k больше 1) в цикле выводится на экран 1 с знаком +.

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


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

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

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