Avatar billede grunken Nybegynder
06. februar 2006 - 17:42 Der er 4 kommentarer og
1 løsning

Kombination af tal

Hejsa

Er der en logikhaj der kan greje nedenstående "lille" spørgsmål?

Lad os antage at en bruger vælger 4 tal: eks. 1,2,3,4
Disse tal skal så efter brugerens valg eks. vis pares i klynger af 2. Ingen af kombinationerne må være ens, og ej heller indeholde et tal 2 gange.

Altså vil resultatet af de ovenstående 4 tal være :

1,2
1,3
1,4
2,3
2,4
3,4

Kombinationen kunne også være 5 tal i klynger af 3

Tal : 1,2,3,4,5
Resultat :
1,2,3
1,3,4
1,4,5
2,3,4
2,4,5
3,4,5

Er der nogen der har et bud på hvordan sådan et lop skal se ud ?

- og skriv endelig hvis der skal uddybes :-)

/Grunken
Avatar billede jarret Nybegynder
06. februar 2006 - 18:50 #1
måske ikke så elegant men et bud, det er java måske det giver en ide...

        int intarray[] = {9,7,3,2,8};
        int klynge = 3;

        for(int i=0 ; i < intarray.length ; i++){
            int temp = intarray[i];
            if(klynge == 1){
            print(temp);
            }
            else{

                for(int y = 0 ; y < intarray.length ; y++){
                    int temp2 = intarray[y];
                    if(klynge == 2){
                        if(temp != temp2 && temp < temp2) print(temp + "," + temp2);
                    }
                    else{
                        for(int z = 0 ; z < intarray.length ; z++){
                        int temp3 = intarray[z];
                        if(temp != temp2 && temp2 != temp3  && temp < temp2 && temp2 < temp3) print(temp + "," + temp2 + "," + temp3);
                        }
                    }
                }
            }
        }
    }
}
Avatar billede grunken Nybegynder
06. februar 2006 - 19:28 #2
glimrende jarret :-)

måske ikke helt så generisk -  man ganke perfekt til mit behov!

Tak for hjælpen - smid et svar :-)
Avatar billede jarret Nybegynder
06. februar 2006 - 21:39 #3
fint du kunne bruge det(-; jeg prøvede med noget recursivt med det gik ikke så godt....
Avatar billede johan.o Nybegynder
08. februar 2006 - 14:16 #4
He he, jeg kunne bare ikke ligge denne her fra mig :)

Foreløbig har jeg kodet det i php. Jeg ved ikke om du har mulighed for at bruge php men anyhow så er jeg igang med at se om jeg kan få det konverteret til javascript :)

Følgende giver dig mulighed for at indtaste en række med unikke tal.
Dernæst indtaste hvor mange tal du vil have i hver klynge.
Og til sidst kan du markere om du kun vil have klynger hvor hvert tal er efterfulgt af et højere. Hvis ikke du vælger dette vil du få alle kombinations muligheder af de tal du har skrevet.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<title>Test.</title>
<script type="text/javascript"></script>
</head>

<body>

<form action="test2.php" method="post">

<table style="width: 400px; margin: 0px auto; border: 1px solid #AAA898;">
<tr>
<td>Talrække :</td>
<td><input type="text" name="tal" value="<?php echo $_POST['tal']; ?>"></td>
</tr><tr>
<td>Antal tal i hver klynge :</td>
<td><input type="text" name="antal" value="<?php echo $_POST['antal']; ?>"></td>
</tr><tr>
<td colspan="2"><input type="checkbox" name="box"> : Mindste tal --> største tal.</td>
</tr><tr>
<td colspan="2" style="text-align: center;"><input type="submit" value="Send"></td>
</tr>
</table>

</form>

<?php

if(isset($_POST['tal'])) {
$tal=array();
$res=array();
$b=array("0");

for($i=0; $i<strlen($_POST['tal']); $i++) {
  array_push($tal, $_POST['tal']{$i}); }

$t="1"; $e="";
for($i=1; $i<count($tal); $i++) {
  $t.="0"; array_push($b, strval($i)); $e.="0"; }

$start=0;
$slut=base_convert(intval($t*10), count($tal), 10);

for($i=$start; $i<$slut; $i++) {

  $temp=base_convert($i, 10, count($tal));
  $temp=substr(strval($e.$temp), -count($tal));

  $t_array=array();

  for($a=0; $a<count($tal); $a++) {
  array_push($t_array, $temp{$a}); }

  if(count(array_diff($b, $t_array))==0) {
  $output="";
  for($c=0; $c<$_POST['antal']; $c++) {
    $output.=$tal[$t_array[$c]]; }
  $stat="ok";
  if(isset($_POST['box'])) {
    for($d=0; $d<(strlen($output)-1); $d++) {
    if(intval($output{$d})>intval($output{$d+1})) {
      $stat="dump"; } } }
  if($stat=="ok") {
    array_push($res, $output); } }
  }

$res=array_merge(array_unique($res));

for($a=0; $a<count($res); $a++) {
  echo $res[$a]."<br>"; }

}

?>

</body>
</html>

Mvh. Johan
Avatar billede johan.o Nybegynder
08. februar 2006 - 14:26 #5
Mja okay, nu har jeg siddet og leget lidt med det, og da det er en ret voldsom løkke der bliver sat igang ved mere end 6 tal, så timeouter serveren efter 30 sec, men med mindre end 7 tal skulle det spille :)

Mvh. Johan
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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