Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » kombinationen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
12.01.2004, 15:04 Uhr
kronos
Quotenfisch
(Operator)


hi!
gesucht ist die funktion
C++:
kombi(int*A,int n);

A ist ein array mit n verschiedenen werten. durch die funktionen wird jede mögliche kombination der werte ausgegeben. jede kombination nur einmal.
beispiel:

C++:
main()
{
A[]={1,2,3};
kombi(A,3);
}

sollte folgende ausgabe liefern (reihenfolge egal):

Code:
123
132
312
321



verwendet wird reines ANSI-C, math.h ist erlaubt.
zu gewinnen gibt es diesesmal zwei virtuelle waschmaschinen, eine für die kürzeste lösung und eine für die performanteste.
für alle lösungen gibt es einen virtuellen schulterklopfer, wer eine lösung unter 120 zeichen bringt, darf sich eine ehren-urkunde ausdrucken.

ist hartes brot wie ich finde, ich hab' selbst noch keine lösung...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.01.2004, 15:20 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


äh...
wie hast du dir das vorgestellt wenn da ne zweistellige zahl im array vorkommt oder sind die tabu...?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.01.2004, 15:23 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich bin zwar kein golferm aber bilde mir ein, eine naive Lösung gefunden zu haben. Ich verlange also einen virtuellen schulterkolpfer....

C++:
#include <stdio.h>

void next(int* a, int n, int k)
{
        if (k==0)
        {
                /* Ausgabe */
                for(;k<n; ++k) printf("%d%c", a[k], n-1==k? '\n':',');
        }else
        {
                /* Nächste Permutation */
                int i,j,t;
                for(i=0,j=k-1; i<k; ++i)
                {
                        t = a[i];
                        a[i] = a[j];
                        a[j] = t;
                        next(a, n, j);
                        a[j] = a[i];
                        a[i] = t;
                }
        }
}


void komb(int*a, int n)
{
        next(a, n, n);
}


int main()
{
        int a[] = {1, 2, 3, 4};
        komb(a, sizeof(a)/sizeof(*a));
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.01.2004, 15:30 Uhr
virtual
Sexiest Bit alive
(Operator)


Ansonsten ziehe ich nach wie vor das hier vor:

C++:
#include <iostream>
#include <algorithm>


int main()
{
    int a[] = { 1, 2, 3, 4 };
    do
    {
        std::copy(a, a+sizeof(a)/sizeof(*a), std::ostream_iterator<int>(std::cout, " "));
        std::cout<<std::endl;
    } while (std::next_permutation(a, a+sizeof(a)/sizeof(*a)));
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.01.2004, 17:28 Uhr
kronos
Quotenfisch
(Operator)


*virtual virtuelle verschulterklopfung verabreich*
sauber! es geht natürlich vor allem um ein prinzip und deines ist recht gut denke ich.
bin gespannt ob noch jemand eine andere lösung findet.

golfer:
die zahlen müssen nicht getrennt werden, nur die newlines müssen sein. wer's trotzdem tut bekommt ein zeichen gutgeschrieben. (ob die funktion funktioniert kann man auch mit einstelligen werten testen)

zusatz-rätsel:
die gleichung für die anzahl unterschiedlicher kombinationen.( allerdings kann man die sicher nachschauen, benoulli, glaub' ich, war da engagiert...)
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 12.01.2004 um 17:36 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.01.2004, 19:57 Uhr
(un)wissender
Niveauwart


@Kronos
Bin ich blöd, oder fehlen bei der Permutation von 1,2,3
213 und 231.

@virtual
#include <iterator> fehlt!

@all
Anzahl dürfte fak(n) sein, braucht man nicht nachschaun, das Physikervorgehen reicht hier.


Bearbeitung:

Wer hat den eine iterative Lösung?


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 12.01.2004 um 20:01 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.01.2004, 23:02 Uhr
virtual
Sexiest Bit alive
(Operator)


@unwissender:
Wenn Du genau hinsiehst, ist die C++ Lösung eine Iterative....
Mit dem Include gebe ich Dir recht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.01.2004, 23:05 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
(un)wissender postete
@Kronos
Bin ich blöd, oder fehlen bei der Permutation von 1,2,3
213 und 231.[quote]
öööhm... wenn ich jetzt sage, du bist blöd, glaubst du mir nicht, oder?


@all
Anzahl dürfte fak(n) sein[/quote]
jo, ich hab' halt keine ahnung mehr, wie man 'ne fakultät ausrechnet. aber ist auch nebensächlich...


Bearbeitung von Pablo:

[ /quote] richtig gesetzt


--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 12.01.2004 um 23:15 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.01.2004, 23:19 Uhr
(un)wissender
Niveauwart


@virtual
Hm, iterativ oder rekursiv, das kann man bei deiner Lösung nicht so genau sagen, einigen könnten wir uns auf hybrid.
Pur iterativ ist, glaube ich, auch sehr nervig.


Bearbeitung:

@virtual
Ah, jetzt habe ich verstanden, du meinst die Lösung mit der stl.
Aber:
Du weißt ja nicht generell, wie die stl(s) das implementieren, könnte also doch rekursiv sein (ich gehe sogar davon aus).



@kronos
fak(1) = 1 = 1
fak(2) = 1*2 = 2
fak(3) = 1*2*3 = 6
fak(4) = 1*2*3*4 = 24
fak(5) = 1*2*3*4*5 = 120
.
.
.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 12.01.2004 um 23:37 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.01.2004, 23:29 Uhr
(un)wissender
Niveauwart



C++:
#include <iostream>
#include <cstdlib>

int fak(int n)
{
    if(n == 1)
        return 1;
    else
        return n * fak(n - 1);
}

int main(int agrc, char *args[])
{
    if(agrc < 2) {
        std::cout << "Bitte Zahl mitgeben!" << std::endl;
        return 1;
   }
  
   int n = atoi(args[1]);  
   std::cout << "Fakultaet von "<< n << ": " << fak(n) << std::endl;
   return 0;
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: