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
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