/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Er jeg idiot eller hvad?
Fra : Bertel Lund Hansen


Dato : 17-01-05 10:33

Hej alle

Jeg lavede en brute force-løsning der skulle finde to talrækker
som følger en given regel, nemlig den at summen af to vilkårlige
elementer i en række ikke også må være i samme række.

Eksempler:
1 2 4
3 5
er okay.

1 2 3
4 5
er forkert


Til at tjekke en løsning bruger jeg følgende rutine. ROWS er 2 (foreløbig).

bool respect_rule () {
int h, p2, sum;

for (int row=0; row<ROWS; ++row) {
// De følgende to linjer kopierer én række over i et array, hold[]
// Antag blot at den række der skal undersøges, er hold[] og se bort fra denne kopiering.
h=0;
for (int nr=1; nr<=LIMIT; ++nr) if (number[nr]==row) hold[++h]=nr;

for (int p0=1; p0<=h-2; ++p0)
for (int p1=p0+1; p1<=h-1; ++p1) {
sum=hold[p0]+hold[p1];
// Test1:
p2=p1+1;
while (sum>=hold[p2]) if (hold[p2++]==sum) return 0;
// Test 2:
for (p2=p1+1; p2<=h; ++p2) if (hold[p2]==sum) return 0;
}
}
return 1;
}

Hvis jeg kobler Test1 ind, er der rigtige løsninger der forkastes.
(Det gælder i hvert fald 1 2 4 8 - 3 5 6 7)

Hvis jeg kobler Test2 ind (og Test2 fra), ser det ud til at virke.

Jeg er på herrens mark hvad forklaring angår. Jeg ville f.eks. umiddelbart
forvente at *Test2* var for hård.

Test1 er baseret på at tallene altid står sorteret. Hvis f.eks. summen er
5 og næste element er 11, behøver jeg ikke tjekke videre da summen
umuligt kan blive lig med de større og større tal.

Test2 tjekker i bund hver gang.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

 
 
Søren Hansen (17-01-2005)
Kommentar
Fra : Søren Hansen


Dato : 17-01-05 11:28

Den Mon, 17 Jan 2005 10:33:08 +0100. skrev Bertel Lund Hansen:
> Jeg lavede en brute force-løsning der skulle finde to talrækker
> som følger en given regel, nemlig den at summen af to vilkårlige
> elementer i en række ikke også må være i samme række.
>
> Eksempler:
> 1 2 4
> 3 5
> er okay.
>
> 1 2 3
> 4 5
> er forkert

Jeg tror ikke helt, jeg forstår succeskriteriet.. Hvorfor er rækken "4
5" forkert?

--
Salu2, Søren


Bertel Lund Hansen (17-01-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-01-05 11:35

Søren Hansen skrev:

>> 1 2 3
>> 4 5
>> er forkert

>Jeg tror ikke helt, jeg forstår succeskriteriet.. Hvorfor er rækken "4
>5" forkert?

Løsningen med de to rækker er forkert. Det er tallene 1 2 3 4 og
5 der er opstillet i et løsningsforslag.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Søren Hansen (17-01-2005)
Kommentar
Fra : Søren Hansen


Dato : 17-01-05 11:55

Den Mon, 17 Jan 2005 10:33:08 +0100. skrev Bertel Lund Hansen:
> Test1 er baseret på at tallene altid står sorteret. Hvis f.eks. summen er
> 5 og næste element er 11, behøver jeg ikke tjekke videre da summen
> umuligt kan blive lig med de større og større tal.

Nu er det sikkert igen fordi jeg ikke har forstået opgaven, men jeg er
igen ikke helt med. Du siger: "Hvis f.eks. summen er 5". Ok, vi har
eksempelvis "2 3" i en række. Så er summen 5. Så langt, så godt. "..og
næste element er 11". Vores imaginære række er nu: "2 3 11". Fint.
"..behøver jeg ikke tjekke videre da summen umuligt kan blive lig med de
større og større tal." Der falder jeg af. Hvis nu rækken er: "2 3 11
14"?

--
Salu2, Søren


Andreas Andersen (17-01-2005)
Kommentar
Fra : Andreas Andersen


Dato : 17-01-05 12:20

Bertel Lund Hansen wrote:

> // Test1:
> p2=p1+1;
> while (sum>=hold[p2]) if (hold[p2++]==sum) return 0;

Hej

Skal du ikke også lige sikre, at du ikke løber uden for arrayet?

while (p2 <= h && sum >= hold[p2]) ...

/Andreas


Bertel Lund Hansen (17-01-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-01-05 14:03

Andreas Andersen skrev:

> Skal du ikke også lige sikre, at du ikke løber uden for arrayet?

Pyha, nu er jeg mere rolig - og svaret på spørgsmålet er
bekræftende.

Tak.

--
Bertel
http://bertel.lundhansen.dk/   Fiduso: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409074
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste