Hogy kell triád-számláló függvényt írni?
Ha jól értem, akkor a triád az az, hogy három számból bármelyiket megkaphatjuk a másik kettő kizáró-vagyolásával (xorzás), lásd:
Itt az én kódom pari/gp-ben:
striad(n)={
s=0;
for(i=0,n,
for(j=i+1,n,
if(xor(xor(i,j),j)==i,
print(concat("{", concat(i, concat(";", concat(j, concat(";", concat(xor(i,j),"}")))))));s+=1);
);
);
return(s);
}
De az a baj, hogy egy triádot többször is számol (két triád egynek számít, ha ugyanazok az elemei). Valaki esetleg meg tudná nekem írni a függvényt úgy, hogy jó legyen? Köszi! :)
private static Triad(int numbersOfTriad)
{
Console.WriteLine("Kinyírunk mert triádok vagyunk!");
TriadKill.Kill--;
}
if (kill == 0)
{
Console.WriteLine("A triádok nyertek..");
}
Egyetlen fontos szempontot kell a programban kikötni:
Ha a két ciklusváltozó XOR értéke kisebb bármelyik ciklusváltozónál (mivel j>i minden esetben, ezért ha kisebb j-nél), akkor ne rögzítse a hármast. A duplikátumok abból származnak, hogy amikor a j változód egy olyan számértéket vesz fel, ami ugyanazon i mellett egyszer kijött XOR értékként, akkor a XOR értékük által kijön az előzőleg j-ben tárolt érték. pl (i,j) = (1,2) esetén a XOR értékük 3, majd (1,3) esetén 2, így kétszer rögzíted ugyanazt a számhármast. Ha kikötöd, hogy i XOR j angyobb kell hogy legyen mindkettőnél, ezt megelőzöd.
Egyébként a xor(x or(i,j),j)==i ellenőrzés teljesen felesleges, az (i XOR j) XOR j mindig i lesz. A XOR asszociativitása miatt (i XOR j) XOR j = i XOR (j XOR j) = i XOR 0 = i;
Köszönöm #1-esnek a jó humorát, de leginkább #2-es válaszának vettem hasznát, sikerült megoldanom, köszi!
striad(n)={
s=0;
for(i=0,n,
for(j=i+1,n,
if(j<xor(i,j),
print(concat("{",concat(i,concat(";",concat(j,concat(";",concat(xor(i,j),"}")))))));s+=1);
);
);
return(s);
}
Itt a jó függvény!
Egyébként nem értem, hogy a kérdés leírásában az if-ben lévő xor műveletbe miért rakott szóközt, de megértettük szerintem egymást. #2-esnek ment a zöld kéz. :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!