szukanie zaawansowane
 [ Posty: 2 ] 
Autor Wiadomość
Kobieta Offline
 Tytuł: [C] Kombinacje
PostNapisane: 28 maja 2018, o 16:39 
Użytkownik

Posty: 40
Lokalizacja: Dąbrowa Górnicza
Witam.
Mam do zrobienia projekt: "Kombinacje. Należy napisać program który dla dowolnej liczby naturalnej n wypisuje wszystkie możliwe kombinacje (kolejność nie gra roli) takich liczb naturalnych, których suma daje liczbę oraz ilość tych kombinacji. np. n=3, 2+1, 1+1+1. " Zrobiłam trochę,ale chyba utknęłam w martwym punkcie i nie wiem co dalej.

Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <conio.h>

void wyswietl(int * tablica, int ilosc, int kolejna_kombinacja)
{
printf("\n%d - ", kolejna_kombinacja);
for (int i = 1; i <= ilosc; i++)
{
  printf("%d,", tablica[i - 1]);
}
}

int main()
{
int biezaca_kolumna, kolumna,liczba, poziom, i,j,k,suma,ilosc_elementow;
bool taka_sama, wszystkie_poziomy=0;
printf("Podaj liczbe calkowita: ");
scanf_s("%d", &liczba);
int * tablica, *tablica_temp;
tablica = new int[liczba];
tablica_temp = new int[liczba];
int ilosc_kombinacji = 0;
for (i = 1; i <= liczba; i++)
{
  tablica[i - 1] = 1;
}
ilosc_kombinacji++;
wyswietl(tablica, liczba, ilosc_kombinacji);
if (liczba <= 0)
{
  printf("Liczba musi byc wieksza od zera");
}
else
{
  biezaca_kolumna = 1;
  while (wszystkie_poziomy)
  {

  }
  /*   for (poziom = 2; poziom <= liczba; poziom++)
  {
  for (kolumna = 1; kolumna <= liczba; kolumna++)
  {
    if (kolumna == 1)
    {
    tablica[kolumna - 1] = poziom;
    }
    else
    {
    for (j = 1;j <= poziom;j++)
    {
      taka_sama = true;

      tablica[kolumna - 1] = j;
      for (k = 1;k <= liczba;k++)
      {
      if (tablica[k - 1] != tablica_temp[k - 1])
      {
        taka_sama = false;
      }
      }
      if (taka_sama==false)
      {
      suma = 0;
      for (k = 1;k <= liczba;k++)
      {
        suma = suma + tablica[k - 1];
        if (suma == liczba)
        {
        ilosc_kombinacji++;
        wyswietl(tablica, k, ilosc_kombinacji);
        }
      }

      for (k = 1;k <= liczba;k++)
        tablica_temp[k - 1] = tablica[k - 1];
      }
    }
    }
  }
  for (kolumna = 2;kolumna <= liczba;kolumna++)
    tablica[kolumna - 1] = 1;
  }
  */
}
ilosc_kombinacji++;

_getch();
return 0;
}
Uniwersytet Wrocławski Instytut Matematyczny - rekrutacja 2018
Góra
Mężczyzna Offline
PostNapisane: 6 cze 2018, o 01:59 
Użytkownik

Posty: 34
Lokalizacja: Poland
Prosta rekurencja:
na stosie przechowywane są liczby do wypisania
stack_id określa górę stosu (miejsce do zapisywania)
Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>

#define min(a,b) (((a)<(b))?(a):(b))
#define MAX_STACK_SIZE 1000

int STACK[MAX_STACK_SIZE];


void print_combinations(int max, int sum, int stack_id);
void print_stack(int stack_end);


int main(){
   int n;
   scanf("%d", &n);
   print_combinations(n, n, 0);
   return 0;
}


void print_combinations(int max, int sum, int stack_id){
   if (sum == 0) {
      print_stack(stack_id);
      return;
   }

   for(int i = min(sum,max); i > 0; --i){
      STACK[stack_id] = i;
      print_combinations(i, sum-i, stack_id + 1);
   }
}

void print_stack(int stack_end){
   printf("%d ", STACK[0]);
   for (int i=1; i<stack_end; ++i)
      printf("+ %d ", STACK[i]);
   printf("\n");
}
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 2 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 C++ kombinacje sumowania liczb ze zbioru .....  marior  2
 [asembler] kombinacje, liczba dziesiętna i pierwiastek  ludmi?a  3
 [C] Mnożenie czynników tak, aby uzyskać wszystkie kombinacje  MichalProg  4
 [C++] Wszystkie kombinacje w macierzy  Katana1  1
 [C] Wariacje i kombinacje  aGabi94  1
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl