Witam mam problem mam 6 literowe slowo i musze obliczyc ile mam kombinacji na duze i male litery np:
ziomek
ZioMek
ZIomEk
jaki to bedzie wzor ?
2^6? -.-
dzieki ;p aale sie wyglupilem l;/
<font size="3"> :-D sprzedam sanki na łatwiznę idziesz :D liczmy liczmy ...
:P tak jak kiedyś w liceum dodawało sie u nas 3+3 wzorami skróconego mnożenia tak i tu pobawmy się [diabel] </span>
Najpierw mamy same małe - 1 możliwość
potem wybieramy kolejno dowolną jedną dużą literkę
potem dwie ,trzy itd ..
oczywiscie n! liczymy tak:
Dokładniejszy wzór :
po podstawieniu wzoru i rozwiązaniu w skrócie :
A no właśnie, zajmujemy się tu programowaniem, trzeba by dać jakiś kawałek kodu
int Factorial(int n) {
int s[n+1];
s[0] = 1;
for (int m = 1; m <= n; m++) {
s[m] = 0;
for (int k = m; k >= 1; k--)
for (int i = 1; i <= k; i++)
s[i] += s[i - 1];
}
return s[n];
}
Brzydal, nie jaśniej tak (dokładnie to samo co wyżej)?
factorial n = (1 : scanl1 (*) [1..]) !! n
albo krócej:
factorial = ((1 : scanl1 (*) [1..]) !!)
mgr.Dobrowolski napisał(a)
A no właśnie, zajmujemy się tu programowaniem, trzeba by dać jakiś kawałek kodu
Niezłe, ja może ulepszę nieco koncepcję - obiecuje, że będzie dużo elegantsze.
//implementation dependent shit
typedef int Peano;
const Peano PEANO_ZERO = 0;
Peano Successor(Peano a){
return a+1;
}
Peano Predecessor(Peano a){
return a-1;
}
//end
Peano PeanoSum(Peano a, Peano b){
if(b==0)
return a;
else return Successor(PeanoSum(a, Predecessor(b)));
}
Peano PeanoMultiply(Peano a, Peano b){
if(b==0)
return 0;
else return PeanoSum(PeanoMultiply(a, Predecessor(b)), a);
}
i skoro mamy solidne i wydajne podstawy matematyczne, możemy jechać dalej z algorytmem
Peano Factorial(Peano n){
Peano s[n+1];
s[0] = Successor(PEANO_ZERO);
for (int m = 1; m <= n; m++) {
s[m] = 0;
for (int k = m; k >= 1; k--)
for (int i = 1; i <= k; i++)
s[i] = PeanoSum(s[i], [i - 1]);
}
return s[n];
}
możemy też napisać piękniejszą wersję, która w pełni wykorzystuje elegancki mechanizm, jakim jest STOS:
Peano Factorial2(Peano n){
if(n == (Peano) 0)
return 1;
else
return PeanoMultiply(n, Factorial2(Predecessor(n)));
}
da się też uniknąć nieeleganckiego rozwiązania, jakim jest niebędąca zawsze częścią standardu funkcja Predecessor - wystarczy skorzystać z AKUMULATORA - niektórzy w tym przypadku stosują pętlę, ale to błąd!
Peano Factorial3(Peano n, Peano acc = (Peano) 1){
if(acc==n)
return acc;
else return PeanoMultiply(acc, Factorial3(n, Successor(acc)));
}
myślę, że ten kod rozjaśni całą sytuację. nie sprawdzałem, może nie działać, ale to tylko prezentacja idei.
Mały OT, jakimi znacznikami trzeba "otoczyć" wzory pisane w TeX-u?
(< code=tex > ... </tex> (bez spacji) nie działa).
Zacytuj któryś post zawierający formułę.
Nic nie daje, kopiuje się tylko formuła, a otaczające znaczniki nie.
Już wiem, pisałem < code=tex >, zamiast < tex >.
tex - mi sie kopiuja
@asdf, różnimy sie rozumieniem słowa "zacytuj", wg mnie zacytuj = skopiuj wzór i obuduj znacznikami < quote >, wg Ciebie zacytuj = umieść odsyłacz.
Kliknij w ten link człowieku... zacytuj == kliknij taki przycisk o mało wymownej nazwie 'cytuj'.
Dzięki za radę, kliknąłem juz dawno, jeszcze dawniej napisałem że już znam odpowiedź. Dla mnie słowo quote jest równie wymowne jak zacytuj.