Wszystkie możliwe kombinacje

0

Witam, mógłby ktoś napisać program w C który liczył by wszystkie wariacje bez powtórzeń ułożenia 10 liter (A do K) ? Jedyny pomysł na jaki wpadłem to 11 pętel for jedna w drugiej co jest pewnie dosyć słabym rozwiązaniem.

0

10 liter z 11 możliwych?
Czy 10 liter A jest jednym z poprawnych kombinacji?

#include <iostream>
using namespace std;

int main()
  {
   const unsigned Max=5,Count=3;
   unsigned tb[Count+1]={0};
   for(unsigned last=0;last<Count;++tb[last])
     {
      for(unsigned i=0;i<Count;++i) cout<<(char)('A'+tb[i]);
      cout<<endl;
      for(last=Count;(--last<Count)&&(tb[last]>=Max);) tb[last]=0;
     }
   return 0;
  }

Przeczytałem komentarz wyżej, potrzebujesz funkcji: std::next_permutation()

0
_13th_Dragon napisał(a):

10 liter z 11 możliwych?
Czy 10 liter A jest jednym z poprawnych kombinacji?

#include <iostream>
using namespace std;

int main()
  {
   const unsigned Max=5,Count=3;
   unsigned tb[Count+1]={0};
   for(unsigned last=0;last<Count;++tb[last])
     {
      for(unsigned i=0;i<Count;++i) cout<<(char)('A'+tb[i]);
      cout<<endl;
      for(last=Count;(--last<Count)&&(tb[last]>=Max);) tb[last]=0;
     }
   return 0;
  }

Przeczytałem komentarz wyżej, potrzebujesz funkcji: std::next_permutation()

Bez używania zewnętrznych funkcji nie da się szybciej niż dziesięcioma pętlami for ?

0
_13th_Dragon napisał(a):

... Przeczytałem komentarz wyżej, potrzebujesz funkcji: std::next_permutation()
Napisz którego słowa nie rozumiesz.

#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

int main()
  {
   char tb[]="ABCD";
   cout<<tb<<endl;
   while(next_permutation(tb,tb+strlen(tb))) cout<<tb<<endl;
   return 0;
  }
0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/* gcc main.c -o main -lm */
/* http://pl.wikipedia.org/wiki/Wariacja_bez_powt%C3%B3rze%C5%84 */

int main(void) {
	unsigned k, den, n = sizeof("ABCD") - 1;
	unsigned long long count = 0;
	double tmp;
	for(k=1;k<=n;++k) {
		den = n - k;
		if(!den) den = 1;
		tmp = ((double)n/den) * exp(lgamma(n)-lgamma(den));
		count += tmp+0.5; /* zaokraglanie w gore */
	}
	printf("%llu\n",count);
	return 0;
}

Może tak się da matematycznie? ale nie jestem pewna, bo mam problemy z rzutowaniem, zaokrąglaniem i tym działem matmy

1 użytkowników online, w tym zalogowanych: 0, gości: 1