Java - hogy kell megoldani, codingbat problema?
Given three ints, a b c, return true if one of b or c is "close" (differing from a by at most 1), while the other is "far", differing from both other values by 2 or more. Note: Math.abs(num) computes the absolute value of a number.
closeFar(1, 2, 10) → true
closeFar(1, 2, 3) → false
closeFar(4, 1, 3) → true
##########################################################
public boolean closeFar(int a, int b, int c) {
int ab = Math.abs(a - b);
int bc = Math.abs(b - c);
int ac = Math.abs(a - c);
return ( ab == 1 && ( bc > 2 || ac > 2 ) ) ||
( bc == 1 && ( ab > 2 || ac > 2 ) ) ||
( ac == 1 && ( ab > 2 || bc > 2 ) )
;
}
az egyik teszten elbukik a kod:
Majdnem jó az elképzelés, csak szerintem kisséfigyelmetlen voltál.
1. A "at most 1" kisebb vagy egyenlőt (ez a "közel") és a "2 or more" nagyobb vagy egyenlőt (ez a "távol") jelöl.
2. Két fő feltétel van:
* az |a - b| "közel" van egymáshoz ÉS a |b - c| ÉS az |a - c| "távol" VAGY
* az |a - c| "közel" van egymáshoz ÉS a |b - c| ÉS az |a - b| "távol"
A |b - c| "közelségét", illetve a |a - b| és az |a - c| "távolságát" nem kell vizsgálni.
public boolean closeFar(int a, int b, int c) {
int ab = Math.abs(a - b);
int bc = Math.abs(b - c);
int ac = Math.abs(a - c);
return ( ab <= 1 && ( bc > 2 || ac > 2 ) ) ||
//( bc <= 1 && ( ab > 2 || ac >2 ) ) ||
( ac <= 1 && ( ab > 2 || bc >2 ) )
;
igy is elesik a teszt,...vagy nem igy gondoltatok?
Én csak azt szúrtam ki első ránézésre hogy az egyenlőség nem jó benne, de más gond is van, úgy jó ahogy a 2-es írta.
Csak két feltételt kell vizsgálni, és nem elég a vagy, mert mindkét távolság legalább 2 kell hogy legyen. Mivel legalább 2, itt szintén engedned kell az egyenlőséget is.
Továbbra is két probléma van:
1. A "2 or more" nagyobb vagy egyenlőt (ez a "távol") jelöl, nem csak nagyobbat.
2. A "közeli" ÉS a "távoli" esetek vizsgálatai között nem VAGY kapcsolat van.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!