Aktív témák
-
heihachi
addikt
Nem értem, hogy hogy jött ki 2 4 6 ...
"Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Na jó, kezdem Én, aztán majd javítgatjuk közösen... Tehát:
Adott a[] tömb, amelynek van n eleme. Ez tárolja a beolvasott számokat.
Adott b[] tömb, szintén n eleme van, és b[j]-ben tárolódik az, hogy a[j] elemre tekintve hány releváns elem van a tömbben. (Ez így bonyolultan hangzik, de mindjárt írom rendesebben...)
Tehát elindulsz a[] tömb első elemétől. Kinevezel egy k változót keresési értéknek, k=a[j] azaz kezdetben a[1]. Megvizsgálod, hogy a[j+1] nagyobbegyenlő-e, mint k.
- Ha nem, akkor léphetsz is tovább, és megvizsgálod, hogy a[j+2] nagyobbegyenlő-e, mint k.
- Ha igen, akkor k=a[j+1] és b[j]++, és nézed tovább (azaz a[j+2]>=k).
Tehát ez két egymásba ágyazott ciklus.
Így végigjárva a teljes a[] tömböt a b[] tömbben a legnagyobb érték a kérdéses kimeneti fájl első sora lesz.
Ezek után meg kell nézni, hogy melyik ez a legnagyobb érték, és az előbb leírt elvhez hasonlóan meghatározni a megfelelő indexeket. Itt már nem kell bejárni a teljes tömböt, csak a kérdéses elemre, kell a fentieket megycsinálni, és kiírni az indexet.
Na egyenlőre ennyi. Sztem műxik, de nem biztos, hogy jó, pláne meg nem biztos, hogy értelmesen írtam le
[Szerkesztve]"Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
EZ A KÓD NEM MŰKÖDŐ PASCAL KÓD!!!
De reméljük érthetőbb, mint az előző leírásom. Ha így sem megy, akkor megírom majd télleg pascalban, csak az holnap du előtt nincs meg...
#ennyi elem van a tömbben
n = 50;
#ebben a tömbben vannak a fájlból beolvasott adatok
a = array[1..n] of longint;
#ez nekünk egy segédtömb
#elegánsabb lenne, ha a[] tömbb többelemű lenne, de...
b = array[1..n] of longint;
#kigyűjtjük b[] tömbbe, hogy a[] tömb egyes elemeire nézve a tömbben 'mögötte' #hány nála nagyobb-egyenlő elem van
for t:= 1 to n-1 do begin
k := a[t];
for j := t+1 to n do begin
if k <= a[j] then begin
k := a[j];
b[t] := b[t]+1;
end;
end;
end;
b[n] := 0;
#ezek után a b[] tömbb legnagyobb eleme meg is felel nekünk
#ha több maximum van, akkor több megoldás van
#azért visszafele nézem, mert így s sorszám után a lehető legkevesebb elem lesz #a[] tömbben, de még a feltételnek így is megfelel
max := b[n];
for t := n-1 downto 1 do begin
if max<b[t] then max := b[t];
s := t;
end;
#max változó mehet ki a kimeneti fájl első sorába
writeln(max);
#most pedig kiválogatjuk a[] tömbből a kérdéses elemeket
#nem kell végignézni az egész tönböt, csak onnan kell indulni, ahol a maximumot #megállapítottuk
#itt jön jól, hogy az előbb visszafele néztünk a tömb maximumához tartozó #sorszámot, így most a lehető legkevesebb elemet kell átvizsgálni
k := a[s];
write(s, ' ');
for j := s+1 to n do begin
if a[j] >= k then begin
k := a[j];
write(j, ' ');
end;
end;
Hogy belefér-e 16 megába, meg nemtom milyen megkötésekbe, azt nem tom...
[Szerkesztve]"Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Íme:
program Projectphc;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n = 6;
var
a : array[1..n] of integer;
b : array[1..n] of integer;
k,j,t,s,max,bol : integer;
begin
a[1] := 12;
a[2] := 2;
a[3] := 11;
a[4] := 4;
a[5] := 10;
a[6] := 7;
b[1] := 0;
b[2] := 0;
b[3] := 0;
b[4] := 0;
b[5] := 0;
b[6] := 0;
for t:= 1 to n-1 do begin
k := a[t];
for j := t+1 to n do begin
if k <= a[j] then begin
inc(b[t]);
end;
end;
end;
b[n] := 0;
max := b[1];
s := 1;
for t := 2 to n do begin
if max < b[t] then begin
max := b[t];
s := t;
end;
end;
k := a[s];
write(s, ' ');
if s <> n then begin
for j := s+1 to n do begin
if a[j] >= k then begin
bol := 0;
if j+1 > n then
write(j, ' ')
else
for t := j+1 to n do begin
if (a[t] < a[j]) and (a[t] >= k) then else bol := 1;
end;
if bol = 1 then begin
k := a[j];
write(j, ' ');
end;
end;
end;
end;
readln;
end."Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
De jó!!! a lenne ilyen pascalban, akkor ott lenne egy pass de nincs (vagyis van elméletileg a magában álló ; de az meg nem állhat else előtt)
Vagy meg lehetne fordítani a feltételt is...
És műxik is.
Kipróbáltam pár esetre, és tutira hozza a várt eredményt.
De látom már megvan c-ben is
[Szerkesztve]"Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Valóban volt benne egy kis logikátlanság...
De javítottam
program Projectphc;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n = 7;
var
a : array[1..n] of integer;
b : array[1..n] of integer;
k,j,t,s,max,bol : integer;
begin
a[1] := 3;
a[2] := 9;
a[3] := 11;
a[4] := 2;
a[5] := 6;
a[6] := 8;
a[7] := 10;
b[1] := 0;
b[2] := 0;
b[3] := 0;
b[4] := 0;
b[5] := 0;
b[6] := 0;
b[7] := 0;
for t:= 1 to n-1 do begin
k := a[t];
for j := t+1 to n do
if k <= a[j] then inc(b[t]);
{writeln('a[',t,':',b[t]);}
end;
b[n] := 0;
max := b[1];
s := 1;
for t := 2 to n do begin
if max <= b[t] then begin
max := b[t];
s := t;
{writeln('új max: ',max);}
end;
end;
k := a[s];
write(s, ' ');
if s <> n then begin
for j := s+1 to n do begin
if a[j] >= k then begin
{writeln('nagyobb elem: ',a[j]);}
bol := 0;
if j+1 > n then write(j, ' ')
else
begin
for t := j+1 to n do begin
if (a[t] < a[j]) and (a[t] >= k) then begin
bol := 1;
{writeln('a ',a[t],' elem jobb elem');}
end;
end;
if bol = 0 then begin
k := a[j];
write(j, ' ');
end;
end;
end;
end;
end;
readln;
end."Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Ebben a példában nagy segítség, hogy nem kell az _összes_ sort felsorolni. Akkor már nem ment meg semmi a rekurzív algoritmisok szépségétől.
Monjuk így sem túl könnyű, de azért még megoldható.
Bár amit írtam azt nem adnám be a tanáromnak, mert azért ezt tagolni kéne, de..."Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Hi!
Ha átalakítod ezt a rész, úgy, hogy kiveszed az egyenlőséget, akkor jó lesz!
for t := j+1 to n do begin
if (a[t] < a[j]) and (a[t] > k) then begin
bol := 1;
{writeln('a ',a[t],' elem jobb elem');}
end;
end;
A második sorban eredetileg volt egyenlőségjel.
Kipróbáltam a visszamenőleges példákra is, azokra is jó = jel nélkül.
[Szerkesztve]"Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Ezt bővíteni kell, mert pl a köv sorozatban hibás eredményt adna (így látatlanban):
4 11 10 9 8 1 2 3
Ha csak azt nézed, hogy hány nagyobb elem van, akkor a 4-től kezdve 11, 10, 9, 8 beleszámítana, holott leghosszabb sorozat az 1 2 3."Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
OK, ezt félreértettem...
Igazán nem kukacoskodni akarok, vagy védeni a saját megoldásomat, de:
''majd megnezzuk, hogy negytol mekkora a leghosszabb novekvo sorozat ''
Szóval ez a mondat itt a lényeg! Hogyan lehet a meghatározni a leghosszabb növekvő sorozatot egy adott elemtől indulva? Ez itt a kvázi bonyolult, és nem az, hogy az honnan kezdődik
Ha ezt kifejted, Én elfogadom."Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Nos, átgondoltam az egészet, és teljesen más koncepcióval álltam elő.
Egyszerűbb lett, gyorsabb, rövidebb. Meg szerintem jó is, de még tesztelem...
Ezt TP7-alá írtam, hátha nincs mindenkinek Delphije
program phv2;
uses
crt;
const
n = 10;
var
t, j, maxsorhossz : byte;
a,b : array[1..n] of integer;
aktualisa : integer;
maxsorhosszb, maxhozindexb : byte;
begin
clrscr;
a[1] := 5;
a[2] := 5;
a[3] := 1;
a[4] := 6;
a[5] := 6;
a[6] := 5;
a[7] := 4;
a[8] := 4;
a[9] := 6;
a[10] := 8;
b[1] := 0;
b[2] := 0;
b[3] := 0;
b[4] := 0;
b[1] := 0;
b[1] := 0;
b[1] := 0;
b[1] := 0;
b[1] := 0;
b[1] := 0;
for t := n downto 1 do begin
aktualisa := a[t];
maxsorhossz := 0;
for j := t to n do begin
if a[j] >= aktualisa then begin
if b[j]+1 > maxsorhossz then maxsorhossz := b[j]+1;
end;
end;
b[t] := maxsorhossz;
end;
maxsorhosszb := 0;
maxhozindexb := 0;
for t := 1 to n do begin
if b[t] >= maxsorhosszb then begin
maxhozindexb := t;
maxsorhosszb := b[t];
end;
end;
aktualisa := 0;
for t := maxhozindexb to n do begin
if a[t] >= aktualisa then begin
aktualisa := a[t];
write(' ',t,' ');
end;
end;
readln;
end."Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
-
heihachi
addikt
Ez majdnem jó, de a kiíratásnál hibáztam . Mostmár végigpróbáltam a topik összes példájára és műxik. Ha ez is hibás, akkor akkor jön a v3
Tehát helyesen:
program phv21;
uses
crt;
const
n = 10;
var
t, j, maxsorhossz : byte;
a,b : array[1..n] of integer;
aktualisa : integer;
maxsorhosszb, maxhozindexb, aktualisindexa : byte;
begin
clrscr;
a[1] := 5;
a[2] := 5;
a[3] := 1;
a[4] := 6;
a[5] := 6;
a[6] := 5;
a[7] := 4;
a[8] := 4;
a[9] := 6;
a[10] := 8;
for t := n downto 1 do begin
aktualisa := a[t];
maxsorhossz := 0;
for j := t to n do begin
if a[j] >= aktualisa then begin
if b[j]+1 > maxsorhossz then maxsorhossz := b[j]+1;
end;
end;
b[t] := maxsorhossz;
end;
maxsorhosszb := 0;
maxhozindexb := 0;
for t := 1 to n do begin
if b[t] >= maxsorhosszb then begin
maxhozindexb := t;
maxsorhosszb := b[t];
end;
end;
aktualisa := a[maxhozindexb];
aktualisindexa := maxhozindexb;
for t := aktualisindexa to n do begin
if (a[t] >= aktualisa) and ((b[t] = b[aktualisindexa]-1) or (b[t] = b[aktualisindexa])) then begin
aktualisa := a[t];
aktualisindexa := t;
write(' ',t,' ');
end;
end;
readln;
end."Lehet a Shift 2 már realisztikusabb mint a valóság" by NOD
Aktív témák
- Autós topik
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Honor Magic5 Pro - kamerák bűvöletében
- Fujifilm X
- Otthoni hálózat és internet megosztás
- HiFi műszaki szemmel - sztereó hangrendszerek
- AMD Radeon™ RX 470 / 480 és RX 570 / 580 / 590
- Samsung Galaxy Felhasználók OFF topicja
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- További aktív témák...
- -56% HP EliteBook 840 G8:i7 1165G7,16GB RAM,512GB NMVe SSD,Iris Xe,IR kam.+ujj.olv.,vil.MAGYAR bill.
- Monitortató plexi konzol több elérhető készletről MONITORCENTER
- -50% HP EliteBook 840 G8: i7 1165G7,32GB RAM,1TB NMVe SSD,Iris Xe,IR kam.+ujj.olv.,vil.MAGYAR bill.
- 1.250.000 FT helyett 940.000 FT !! MacBook Pro 16" M3 Pro 12CPU / 18GPU / 18GB / 512 SSD
- RTX 2080TI ROG STRIX GAMER PC