Aktív témák
-
Miracle
senior tag
ez nekem egy nagyon szép visszalépéses algoritmusnak tűnik, de most nincs kedvem ilyet írni, de ha utánanézel a visszalépéses algoritmusoknak, vagy angolul a backstep-nek, akkor találhatsz értékelhető infót. ha nem, és holnap lesz kedvem, akkor megírom. hová kell?
értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
-
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
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
-
Szsolt
tag
Próbáld meg ezt...
#include <stdio.h>
#include <stdlib.h>
int t[]={12,2,11,4,10,7};
int index[3];
int length=6, max=1;
void kiir() {
int i;
for (i=0; i<max; ++i)
printf(''%d '',index+1);
printf(''\n'');
}
void szamolmax(int n, int db) {
int i;
for (i=n+1; i<length; ++i)
if (t[n]<t) szamolmax(i,db+1);
else if (db>max) max=db;
if (db>max) max=db;
}
void mentes(int n, int db) {
int i;
index[db-1]=n;
if (max==db) kiir();
for (i=n+1; i<length; ++i)
if (t[n]<t) mentes(i,db+1);
}
int main() {
int i;
for (i=0; i<length; ++i)
szamolmax(i,1);
printf(''%d\n'',max);
for (i=0; i<length; ++i)
mentes(i,1);
return 0;
} -
-
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
-
majdnem
csendes tag
Egy ''majdnem'' c megoldas (c++). Az adatbeviteli es kiiro resz nincs kidolgozva. Remelem meg aktualis. Biztosan jo
#include <iostream>
using namespace std;
int main(){
//adatok beolvasasa
const int n = 6;
int tomb[n+1] = {0, 12, 2, 11, 4, 10, 7};
//ket segedtomb feltoltese
int kov[n+1], hossz[n+1];
for(int i=0; i<=n; i++){
kov = -1; hossz = 0;
}
// lenyeg
for(int i=n-1; i>=0; i--){
for(int j=i+1; j<=n; j++){
if(tomb<=tomb[j] && hossz<=hossz[j]){
hossz = hossz[j]+1;
kov = j;
}
}
}
//eredmenyek kiirasa
cout << hossz[0] << endl;
int kovind = kov[0];
while(kovind!=-1){
cout << kovind << '' '';
kovind = kov[kovind];
}
}
Ha kell magyarazat is szoljatok.
[MOD] HTLM elcseszte a tordelest....
[Szerkesztve]