Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kako riješiti ovo 4/6 + 2/6

[es] :: C/C++ programiranje :: kako riješiti ovo 4/6 + 2/6

[ Pregleda: 3107 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dado_k
Varaždin

Član broj: 57122
Poruke: 300
*.cmu.carnet.hr.

ICQ: 326865106
Sajt: radim baš novi sajt u ph..


Profil

icon kako riješiti ovo 4/6 + 2/627.11.2005. u 17:33 - pre 223 meseci
dakle imam array float a[6] kako najbrže ustanoviti dali su 4 vrijednosti jednake i ove preostale dvije da su jednake i veće za korijen iz dva od ovih četiri evo npr ako imam ovakav primjer

a[0]=1;
a[1]=1,41; //korijen iz dva
a[2]=1;
a[3]=1,41;
a[4]=1;
a[5]=1;

to je dobro znači funkcija treba vratiti true vrijednost a ako imam nešto tipa

a[0]=1;
a[1]=1,41; //korijen iz dva
a[2]=2;
a[3]=1,41;
a[4]=1;
a[5]=1;

više nije dobro s time da ovaj 1 može biti bilo koji prirodan broj
znam da bi se to moglo sa if else no imao bi 15 kombinacija i nije baš nešto ima neki bolji način?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: kako riješiti ovo 4/6 + 2/627.11.2005. u 21:04 - pre 223 meseci
Sigurno postoji prostije resenje, pogotovo ako se koriste liste koje vec
imaju modus SORTED i NO_DUPLICATES, ali evo ovako skolski...

NETESTIRANO:

Code:

bool Result( double *niz )
{
   // buduci niz bez duplikata
   double x[6] ={0};

   // brojac pojavljivanja
   int c[6] ={0};
    
   // koliko razlicitih brojeva se javlja
   int count = 0;

   // napravi novi niz x[], koji ce imati samo po jedan element od svake vrste
   // tj, bez duplikata
   for ( int i=0; i<6; i++ )
   {
      bool exists = false;
      for ( int j=0; j<count; j++ )
         if ( niz[i] == x[j] )
            exists = true;

      if ( !exists )
         x[ count++ ] = niz[i];
   }

   // ako je taj broj razlicit od DVA, to znaci da ne valja
   if ( count != 2 )
      return ( false );


   // u niz c[] na istim indexnim pozicijiama kao x[], saberi koliko se puta javlja taj broj
   for ( int i=0; i<6; i++ )
   {
      if ( x[0] == niz[i] )
         ++c[0];

      if ( x[1] == niz[i] )
         ++c[1];
   }


   // ako se ne javlja u odnosu 4:2 ili 2:4, nije dobro...
   if ( ! ( ( ( c[0] == 4 ) && ( c[1] == 2 ) ) ||
          ( ( c[0] == 2 ) && ( c[1] == 4 ) ) ) )
      return ( false );


   //veci broj stavi u max, a manji u min

   double max;
   double min;

   if ( x[0] > x[1] )
   {
      max = x[0];
      min = x[1];
   }
   else
   {
      max = x[1];
      min = x[0];
   }

   // ONAJ ZADNJI DEO KOJI POREDI KOREN IZ DVA NISAM RAZUMEO,
   // PA GA SAM DORADI...

   // max ti je veci od ta dva broja
   // min ti je manji od ta dva broja


   return ( true );
}


ili kada se koristi:

Code:

double a[6];
a[0]=2;
a[1]=1.41; //korijen iz dva
a[2]=2;
a[3]=1.41;
a[4]=2;
a[5]=2;

if ( Result( a ) == false )
   // ...
else
   // ...



PAZI, NIJE TESTIRANO, MOŽDA IMA BUG-OVA...
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: kako riješiti ovo 4/6 + 2/627.11.2005. u 21:25 - pre 223 meseci
Citat:
X Files: Sigurno postoji prostije resenje, pogotovo ako se koriste liste koje vec
imaju modus SORTED i NO_DUPLICATES, ali evo ovako skolski...

std::Set
 
Odgovor na temu

vjova
Jabuka

Član broj: 62349
Poruke: 5
*.vdial.verat.net.



+1 Profil

icon Re: kako riješiti ovo 4/6 + 2/628.11.2005. u 22:51 - pre 223 meseci
On Sun, 27 Nov 2005 18:33:14 CET, dado_k wrote:


Citat:

dakle imam array float a[6] kako najbr�e ustanoviti dali su 4 vrijednosti jednake i ove preostale dvije da su jednake i ve�e za korijen iz dva od ovih �etiri evo npr ako imam ovakav primjer


a[0]=1;

a[1]=1,41; //korijen iz dva

a[2]=1;

a[3]=1,41;

a[4]=1;

a[5]=1;


to je dobro zna�i funkcija treba vratiti true vrijednost a ako imam ne�to tipa


a[0]=1;

a[1]=1,41; //korijen iz dva

a[2]=2;

a[3]=1,41;

a[4]=1;

a[5]=1;


vi�e nije dobro s time da ovaj 1 mo�e biti bilo koji prirodan broj

znam da bi se to moglo sa if else no imao bi 15 kombinacija i nije ba� ne�to ima neki bolji na�in?

----

radim ba� novi sajt u php-u...



Uvek ima bolji nacin uz pomoc for petlje


int funkcija(float *a){

float temp,temp2;

int j,i,isto=0,isto2=0;

temp=a[0];

for(i=0;i&lt;6;i++) if(temp=a) isto++ else temp2=a;

for(j=0;j&lt;6;j++) if(temp2=a[j]) isto2++;

if(temp2==1.41*temp1) if((isto==4) &amp;&amp; (isto2==2)) return 1;

if(temp1==1.41*temp2) if((isto==2) &amp;&amp; (istp2==44)) return 1;

return 0;

}



--

[email protected]
 
Odgovor na temu

[es] :: C/C++ programiranje :: kako riješiti ovo 4/6 + 2/6

[ Pregleda: 3107 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.