9 svar
67 visningar
dajamanté är nöjd med hjälpen!
dajamanté 5228
Postad: 14 jan 2019 Redigerad: 14 jan 2019

Enkel uppgift, äckligt lösning

Hej igen!

Jag kommer inte på något snyggt för att lösa det

Jag har sparat allt i en array och jämför $$ x_{1}, x_{2}, x_{3} $$ (respektive y) med värdarna, men det blir 6 jämförelser... Hur skulle ni göra det snyggt?

Laguna 4372
Postad: 14 jan 2019

Förlåt att jag kommenterar ditt språk, men jag trodde "värdarna" betydde "värdena" först och förstod inte så mycket. Men menar du "varandra"?

dajamanté 5228
Postad: 14 jan 2019 Redigerad: 14 jan 2019

Nej nej det är absolut ingen fara!

Jag värdar det hemliga hoppet att prata och skriva snyggt på svenska någon dag, så språkpolisen är altid välkommen. 

Ja, det är nog värdena som jag menade. Jag jämför varje x för att hitta den enstaka som inte återkommer 2 ggr.

Och samma för y.

 

Edit: titta, jag även försökte rekrytera back in the days: https://www.pluggakuten.se/trad/sprak-polis-sokes/

Laguna 4372
Postad: 14 jan 2019

Jag behöver bara jämföra x1 med x2 och x2 med x3, två jämförelser. (Och sen y också.) Men sen blir det äckligare än något annat. Hur ser hela din kod ut?

dajamanté 5228
Postad: 14 jan 2019

Jag gjorde det i början men problemet är att test fall 2 faller med bara 2 jämförelser.

Testa din med den andra testfall som kommer med exempel!

 

public class Main {

public static void main(String[] args) {
Kattio io = new Kattio(System.in);
int[] coordinates = new int[6];

for (int i = 0; i < 6; i++) {
coordinates[i] = io.getInt();
}

//printing x
if (coordinates[0] == coordinates[2])
System.out.print(coordinates[4]);
else if (coordinates[0] == coordinates[4])
System.out.print(coordinates[2]);
else if (coordinates[2] == coordinates[4])
System.out.print(coordinates[0]);
System.out.print(" ");
//printing y
if (coordinates[1] == coordinates[3])
System.out.print(coordinates[5]);
else if (coordinates[1] == coordinates[5])
System.out.print(coordinates[3]);
else if (coordinates[3] == coordinates[5])
System.out.print(coordinates[1]);
}

}

Laguna 4372
Postad: 14 jan 2019

Eftersom man vet att två av x:en är lika behövs inte den tredje jämförelsen, utan då vet man att det är coordinates[0] som ska ut. Om man inte är säker på att input beter sig så, så måste man ha en fjärde klausul med "else" där man ger ett lämpligt felmeddelande.

Men en smula "äckligt" är det att man bara håller på med siffrorna 0 till 5 och måste komma ihåg vad som är x och vad som är y. Det skulle vara mer lättläst om man hade en array för x och en för y.

En smula oelegant är det också att man har precis samma logik på två ställen, fast med olika index. Först gör man en sak för x och sedan precis samma för y. Det borde gå att göra en funktion för det.

Men din kod är helt OK.

dajamanté 5228
Postad: 14 jan 2019

Nej, det trodde jag också men det behövs alla tre jämförelser konstigt nog.

Har du skickat din kod i deras tester?

Hur skulle du ha löst det utan arrayer?

Laguna 4372
Postad: 14 jan 2019
dajamanté skrev:

Nej, det trodde jag också men det behövs alla tre jämförelser konstigt nog.

Har du skickat din kod i deras tester?

Hur skulle du ha löst det utan arrayer?

Nej, jag har inte provat.

Jag sa inte utan arrayer, jag sa att jag skulle föredra två arrayer.

dajamanté 5228
Postad: 15 jan 2019

Jag tror vi måste ha tre jämförelser: en första tillåter att skriva ut x_3, den andra x_1, så vi måste vara en upplopp för x_2. Ok, om det är inga bättre förbättring stänger jag :)

Tack Laguna!

Laguna 4372
Postad: 15 jan 2019
dajamanté skrev:

Jag tror vi måste ha tre jämförelser: en första tillåter att skriva ut x_3, den andra x_1, så vi måste vara en upplopp för x_2. Ok, om det är inga bättre förbättring stänger jag :)

Tack Laguna!

Min teori är att du kan ta bort "if (coordinates[2] == coordinates[4])".

Svara Avbryt
Close