Avatar billede riversen Nybegynder
05. april 2002 - 15:13 Der er 19 kommentarer og
1 løsning

Mangler et stykke kode

Hej,

jeg mangler et stykke kode der kan udskrive hvor mange forskellige måder nogle tal kan sættes sammen på...4 ad gangen...
altså hvis der er 4 tal skulle der være 4*4*4*4 muligheder...og med seks tal 6*6*6*6 muligheder så vidt jeg ved...

håber det er forståeligt. Retter evt. point hvis det ikke er så ligetil...
Avatar billede Slater Ekspert
05. april 2002 - 15:15 #1
var num = 4;

var res = 1;
for (var i = 0; i < num; i++)
  res *= num;


sådan cirka.
Avatar billede riversen Nybegynder
05. april 2002 - 15:17 #2
ja, det kunne jeg nu godt finde ud af...

kombinationerne skal udskrives :-)
Avatar billede riversen Nybegynder
05. april 2002 - 15:20 #3
jeg formulerede mig vist ikke helt korrekt i først linie, sorry
Avatar billede delwin Nybegynder
05. april 2002 - 15:21 #4
Math.pow(base, exponent)

f.eks. Math.pow(2,8) = 256

hvis du har et tal som f.eks. 1234 er der 10000 muligheder..
det ville du skrive således Math.pow(10,4)
Avatar billede delwin Nybegynder
05. april 2002 - 15:23 #5
jeg kan ikke huske den præcise syntaks.. men det er noget i denne stil..

somevar = Math.pow(10,4);

for(var i=1;i<=somevar;i++) {
system.println(i);
}
Avatar billede riversen Nybegynder
05. april 2002 - 15:34 #6
prøver lige at forklare igen...det er kombinatorik med tilbagelægning (så vidt jeg husker hedder det sådan).

lad os sige der er 4 pladser (det vil der ALTID være i mit tilfælde).
og der er eksempelvis 6 tal at gøre godt med...
der er altså 1296 forskellige kombinationer

hvordan ser disse kombinationer ud? de skal udskrives.
Avatar billede jakoba Nybegynder
05. april 2002 - 15:37 #7
String alfabet = "1234";
// dine cifre eller hvad der nu skal sættes sammen

void kombiner( int n, String sofar ) {
    if ( n == 0 ) {
        System.out.println( sofar );
    } else {
        String forsog;
        for ( int i=0; i<alfabet.length(); i++ ) {
            forsog = sofar+alfabet.charat(i);
            kombiner( n-1, forsog );
        }
    }
} //endfunction kombiner

kaldes med

    kombiner( 4, "" ); // for 4 tegn.

mvh JakobA
Avatar billede riversen Nybegynder
05. april 2002 - 15:47 #8
jakoba: ja, det lapper derhen af men hvis jeg giver 6 med som parameter udskriver den fx. 444433

der er kun 4 pladser at placere tallene 1-6 på...
en kombination kunne se sådan ud
4456
Avatar billede jakoba Nybegynder
05. april 2002 - 15:52 #9
de tal der skal vælges imellem står i alfabet. for dig bliver det så

String alfabet = "123456";

det du angiver i første kald er antal pladser, så for dig vil det altid være 4.

mvh JakobA
Avatar billede riversen Nybegynder
05. april 2002 - 15:59 #10
kan det ikke laves omvendt...det vil nemlig altid være 4
Avatar billede riversen Nybegynder
05. april 2002 - 16:10 #11
ligemeget...jeg prøver bare at sætte n til at være fast og så lave alfabet ud fra den parameter der gives med...
Avatar billede riversen Nybegynder
05. april 2002 - 16:15 #12
nå nej, det går jo ikke rigtigt..men jeg leget lidt og vender tilbage
Avatar billede jakoba Nybegynder
05. april 2002 - 16:17 #13
String alfabet = "1234";
// dine cifre eller hvad der nu skal sættes sammen

void kombiner( int n, String sofar ) {
    if ( n == 0 ) {
        System.out.println( sofar );
    } else {
        String forsog;
        for ( int i=0; i<alfabet.length(); i++ ) {
            forsog = sofar+alfabet.charat(i);
            kombiner( n-1, forsog );
        }
    }
} //endfunction kombiner

void visPermut( String tegnene ) {
    alfabet = tegnene;
    kombiner( 4, "" );
} //endfunction visPermut

nu er det visPermut du kalder og du kalder den med en streg bestående af de bogstaver der skal bruges denne gang

fx:
    visPermut( "1234" );
    visPermut( "123456" );
    visPermut( "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" );

osv.

mvh JakobA
Avatar billede riversen Nybegynder
05. april 2002 - 16:21 #14
jakoba: måske jeg bliver for krævende, men det skal simpelthen være med at kald af en metode der skal have en int og kun en int som parameter...
hvorfor er endnu mere bøvlet at forklare, hvilket jeg ikke har succes med...

det falder nok lidt flere point af
Avatar billede riversen Nybegynder
05. april 2002 - 16:23 #15
måske jeg kan forklare alligevel...

jeg har en LinkedList hvori der er nogle objekter...jeg vil finde ud af hvor mange forskellige sammensætningsmuligheder der er, når der kun må sættes 4 objekter sammen af gangen...derfor skal metoden kaldes med LinkedList.size()
Avatar billede jakoba Nybegynder
05. april 2002 - 16:37 #16
String alfabet = "1234";
// dine cifre eller hvad der nu skal sættes sammen

void kombiner( int n, String sofar ) {
    if ( n == 0 ) {
        System.out.println( sofar );
    } else {
        String forsog;
        for ( int i=0; i<alfabet.length(); i++ ) {
            forsog = sofar+alfabet.charat(i);
            kombiner( n-1, forsog );
        }
    }
} //endfunction kombiner

String mangeTegn = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";

void visPermut( int antal ) {
    if ( antal >= mangeTegn.length() ) {
        System.out.println( "Sorry. Cant do that. Udvid variablen mangeTegn med flere tegn" );
        return;
    }
    alfabet = mangeTegn.substr(0,antal)
    kombiner( 4, "" );
} //endfunction visPermut

nu er det visPermut du kalder og du kalder den med et tal der fortæller hvormange bogstaver der skal bruges denne gang

fx:
    visPermut( 4 );
    visPermut( 6 );
    visPermut( 14 );
osv.

mvh JakobA

men hvis du blot vil have antallet er det da lidt nemmere at sige
  System.out.println( Math.pow( antal, 4 ) );
Avatar billede riversen Nybegynder
05. april 2002 - 16:41 #17
jeg får vel et problem hvis jeg gerne vil udskrive indexet +1 fra den LinkedeListe der den hopper over til bogstaver
Avatar billede jakoba Nybegynder
05. april 2002 - 16:58 #18
Ja, hvis de sekvenser der genereres skal benyttes som numeriske index-værdier til tabeller må din parameter til visPermut aldig blive større end 10.

Det er dog rimelig nemt at komme op på ca 35 ved at benytte et radix deroptil for at konvertere den genererede streng til et tal

int nummer = Integer.parseInt( "1AGH", 20 );
konverterer den streng som et radix-20 tal

mvh JakobA
Avatar billede riversen Nybegynder
05. april 2002 - 17:10 #19
synes det lugter for meget af lappe løsning...

har lavet det her som virker...

  static void kombi( int tal)
  {
    for( int i = 1; i <= tal; i++ )
      for( int j = 1; j <= tal; j++ )
        for( int k = 1; k <= tal; k++ )
          for( int l = 1; l <= tal; l++ )
            System.out.println( i + " " + j + " " + k + " " + l );
Avatar billede jakoba Nybegynder
05. april 2002 - 17:12 #20
ok :-))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester