Jump to content
php.lv forumi

Ka izveidot "katrs ar katru" sistēmu?


Recommended Posts

Posted

Ir 10 cilvēki. Un vajadzētu izvadīt visus iespējamos variantus, kā vinjus pa 2 var savienot. Tas laikam sanāk, ka būs 10*9=90 varianti? Kā to varētu izvadīt, pieņemot ka cilvēki ir vienā masīvā?

Posted

Ja cilvēku kārtība nav svarīga (1 un 2 ir tas pats kas 2 un 1), tad būs tikai 45 varianti (10!/2!/8! - kombinācija). Ja kārtība ir svarīga, tad būs 90 varianti (10!/8! - permutācija).

To 90 variantu kods izskatītots apmēram šādi (pseidokodā):

masivs = [...]; // visi elementi
for (i=0; i<count(masivs); i++)
{
 for (j=0; j<count(masivs); j++)
 {
if (i != j)
{
	print masivs[i], masivs[j]
}
 }
}

Posted (edited)
Ja kārtība ir svarīga, tad būs 90 varianti (10!/8! - permutācija).

 

vai tad tā nebūs variācija bez atkārtojumiem??? .... nu īstenībā tas nav tik svarīgi :)

 

šitā laikam būs ja kārtība nav svarīga...

 

masivs = [...]; // visi elementi
for (i=0; i<count(masivs); i++)
{
 for (j=i; j<count(masivs); j++)
 {
if (i != j)
{
	print masivs[i], masivs[j]
}
 }
}

Edited by gaziks52
Posted

Šo itkā sapratu. Bet vai varētu vēl sarezģītāku ar nosacijumu, ka tas pats cilveks neatkartojas kamēr visi citi nav izvadīti.

Tas būtu ja ņem 4 cilvekus tikai:

1-2

3-4

1-3

2-4

utt.

Nevis:

1-2

1-3

1-4

2-3

utt.

Posted (edited)
Un kurš tādā gadījumā uzģenerēs kombināciju 3 0, vai jebkuru citu formā N M, kur M<N ?

 

nu izskatās ka autors prasa bez atkārtojumiem tātad tas nemaz nav vajazdīgs tas 3 0...

 

Šo itkā sapratu. Bet vai varētu vēl sarezģītāku ar nosacijumu, ka tas pats cilveks neatkartojas kamēr visi citi nav izvadīti.

Tas būtu ja ņem 4 cilvekus tikai:

1-2

3-4

1-3

2-4

utt.

Nevis:

1-2

1-3

1-4

2-3

utt.

 

nu bet tas pats vien jau būs tikai secība cita...

 

tas ko tev vajag...

1-2

3-4

1-3

2-4

1-4

2-3

 

tas kas sanāk ar to algoritmu

1-2

1-3

1-4

2-3

2-4

3-4

Edited by gaziks52
Posted

nu viens veids kā to izdarīt ir salikt rezultātus masīvā...

 

mas[0]='1-2'
mas[1]='1-3'
mas[2]='1-4'
mas[3]='2-3'
mas[4]='2-4'
mas[5]='3-4'

for(i=0; i<count(mas)/2; i++) {
  print mas[i];
  print mas[count(mas)+i+1];
}

 

gan jau ka var vienkāršāk bet šitajam arī vajadzētu iet ..

Posted

Bez atkārtojumiem sanāks tik 45 varianti, nevis 90 kā prasa autors ;)

Ja vajag bez atkārtojumiem, tad ņem vērā codez ieteikumu un nebūs tev atkārtojumu.

Posted

Doma ir tāda ka vajag sadalīt pa grupām, kur katrā grupā katrs cilveks ir tikai vienu reizi un katrā grupā ar citu pretinieku. Laikam sākumā jau vajadzēja pateikt.

Posted

Jau kuro dienu nevaru pats izdomāt, kā izveidot. Doma ir tāda ka vajag sadalīt pa grupām, kur katrā grupā katrs cilveks ir tikai vienu reizi un katrā grupā ar citu pretinieku.

Posted

Man sanāca, ka šādi var:

<?php
// (c) codez
$teams=19;
if ($teams%2==1) {$teams++;}
echo 'Teams:'.$teams.'<br />';
for ($i=2;$i<=$teams;$i++){
 echo '1:'.$i;
 for ($j=1;$j<($teams/2);$j++){
$t1=($i+$j-2)% ($teams-1)+2;
$t2=($teams+$i-$j-3)% ($teams-1)+2;
echo ' | '.$t1.':'.$t2;	  
 }
 echo '<hr />';  
}
?>

Ja ir nepāra skaits komandu, tad pieliekam 1 klāt un tā komanda, kuru iepāro ar lieko, izlaiž to raundu.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...