Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 4.734 pregleda

Najnovija ↓

[Zadatak] - jednostavan?! 13.08.2005. u 22:34 · pre 258 meseci #1
Procitao sam da je na nekom takmicenju bio sledeci zadatak (papir sam izgubio, a zadatka se ne sjecam tačno..): Iz datoteke se ucitava binarni broj duzine do 8 mjesta. Naci najvecu seriju jedninica u zapisu tog broja, te ispisati njenu duzinu i lokaciju. Na primjer,

ULAZ: 10011101
IZLAZ: 3 4

Ja sam to mislio rijesiti "na silu", dakle gledati da li iza prve jednice u zapisu ima jos jedinica, pa ako ima brojiti koliko, a ako nema preci na sledecu jedinicu, itd. Na kraju se uzima najveca grupa jedinica i u datoteku upisuju podaci vezani za nju.
Postoji li neko elegantnije rjesenje?

Hvala!
Re: [Zadatak] - jednostavan?! 14.08.2005. u 01:01 · pre 258 meseci
izmenjeno 1 put, poslednji put peromalosutra 14.08.2005. u 01:02
  1. peromalosutra14.08.2005. u 01:02zapis iz teksta poruke
#2
Sad sam se sjetio jos jednog: pretvorimo ulaznu vrijednost u string, a zatim prvo pretrazujemo da li u tom stringu postoji pod-string od dve jedinice. Zatim trazimo podstirng od 3,4 pa sve do krajnje mogucnosti, tj 8 jedinica. Sve rezultate upisujemo u niz. Kada predjemo svih 8 mogucnosti, u nizu pogledamo koji je najveci skup jedinica, a zatim pomocu procedure pos(pod_niz,niz) odredimo njegovu lokaciju.
Ovo mi se cini kao ljepse rjesenje, ali cuo sam da nekom liku na takmicenju nisu priznali zadatak slican ovome jer je takodje koristio varijablu tipa string za zapis bin. broja (iako nigdje nisu naglasili kojeg tipa mora da bude varijabla).
Re: [Zadatak] - jednostavan?! 14.08.2005. u 10:49 · pre 258 meseci #3
Napraviš si array int-a. Zatim prolaziš po binarnom broju i u svako polje array-a zapisuješ koliko je jedinica zaredom ispred njega.
Npr. za tvoj slučaj bi taj array izgledao : 1 0 0 1 2 3 0 1

Onda istovremeno traziš maximum, a pozicija je pozicija na kojoj se maximum nalazi minus maximum. ;-) rjesenje je malo cudno , ali je brže.

Potpis
#include <D3adly.h>
Re: [Zadatak] - jednostavan?! 14.08.2005. u 11:41 · pre 258 meseci
izmenjeno 1 put, poslednji put peromalosutra 14.08.2005. u 11:42
  1. peromalosutra14.08.2005. u 11:42zapis iz teksta poruke
#4
Uradio sam zadatak na ovaj način i radi za sve test-primjere:

Code:


program max_jedinica;
uses wincrt;
var broj,skup:string;
    i,temp_lok,max,lokacija:integer;

function pretvori (n:integer):string;
var i:integer;
    s:string;
begin
s:='';
for i:=1 to n do
    s:=s+'1';
pretvori:=s;
end;


begin
readln (broj);
max:=0;
for i:=1 to length(broj) do
    begin
    skup:=pretvori(i);
    temp_lok:=pos(skup,broj);
    if (temp_lok>0) and (i>max)
       then max:=i;
    end;
lokacija:=pos(pretvori (max),broj);
writeln (lokacija,max:3);      
end.

 



Uradio sam da čita podatke sa tastature, a ne sa diska zbog jednostavnosti, to nije problem. Jedino što tad moram korisiti biblioteku WinCrt (čitaj CRT) koja je valjda zabranjena na takmičenjima, ali to neće biti problem pri učitavanju i snimanju na disk.

Da li je ovo korektno rjesenje?
Re: [Zadatak] - jednostavan?! 14.08.2005. u 12:59 · pre 258 meseci
izmenjeno 1 put, poslednji put Toyo 14.08.2005. u 13:19
  1. Toyo14.08.2005. u 13:19zapis iz teksta poruke
#5
Ne verujem da na takmicenju traze da radis sa pos funkcijom, ali ako je tako...
Code:

var    
   i, poz: integer;
   s:string;
begin
     readln(s);
     i := 9;
     repeat
           dec(i);
           poz:=pos(copy('11111111',1,i),s);
     until (i=1) or (poz>0);
     writeln(i:3, poz:3);
end.


i malo bezobraznije bez copy i varijable i....
Code:

var
   s, j:string;
   poz: integer;
begin
     j := '11111111';
     readln(s);
     repeat
          poz:=pos(j,s);
          dec(j[0]);
     until (j[0]=#0) or (poz>0);
     writeln(byte(j[0])+1:3, poz:3);
end.


Mislim da se trazi da sa jednim prelaskom kroz string pronadjes maksimum i poziciju u stringu, a ovo sto sam napisao nije to.
Re: [Zadatak] - jednostavan?! 14.08.2005. u 14:57 · pre 258 meseci
izmenjeno 1 put, poslednji put peromalosutra 14.08.2005. u 15:00
  1. peromalosutra14.08.2005. u 15:00zapis iz teksta poruke
#6
Pa kao sto sam rekao:
Citat:

Ovo mi se cini kao ljepse rjesenje, ali cuo sam da nekom liku na takmicenju nisu priznali zadatak slican ovome jer je takodje koristio varijablu tipa string za zapis bin. broja (iako nigdje nisu naglasili kojeg tipa mora da bude varijabla).

Ali u pravilniku nigdje nisu naglasili na koji način se zadatak radi, samo su rekli da se ne smiju koristiti nikakve dodatne biblioteke, a pos,str, i ostale funkcije/procedure za rad sa stringovima rade bez uključivanja bilo kojih dodatnih bibl. Pošto se broj učitava iz tekstualne datoteke, valjda se može koristiti tip varijable koji učesniku najviše odgovara, jer rekli su da se učitava binarni broj, a ne i u koji tio varijable treba on da se sačuva.

Mislim, glupo je da ti govore - to smiješ, a to ne. U čemu je onda svrha učenja tih naredbi ako ih ne smiješ koristiti.. Po meni bi trebalo da ti daju problem i puste te da ga rješavaš kako hoćeš.
Re: [Zadatak] - jednostavan?! 14.08.2005. u 22:34 · pre 258 meseci #7
Citat:
peromalosutra: Sad sam se sjetio jos jednog: pretvorimo ulaznu vrijednost u string, a zatim prvo pretrazujemo da li u tom stringu postoji pod-string od dve jedinice. Zatim trazimo podstirng od 3,4 pa sve do krajnje mogucnosti, tj 8 jedinica. Sve rezultate upisujemo u niz. Kada predjemo svih 8 mogucnosti, u nizu pogledamo koji je najveci skup jedinica, a zatim pomocu procedure pos(pod_niz,niz) odredimo njegovu lokaciju.

Cisto komentar na ovaj algoritam.
Bolje bi bilo proveravati unazad tj. prvo da li ima 8 jedinica, pa 7, 6... Tako ne moras da proveravas sve duzine vec cim naidjes na onu koju trazis to je - to.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: [Zadatak] - jednostavan?! 14.08.2005. u 23:12 · pre 258 meseci #8
Ovo sto kaze Shadowed je tacno, ali taj algoritam uopste nema smisla. Ovaj zadatak je skolski i radi se u jednom prolazu kroz niz (keceva i nula). Stalno pamtis pocetak niza jedinica i kad dodjes do prekida niza pogledas da li je duzina veca od trenutne maximalne i ako jeste zapamtis je zajedno sa pocetnim indexom.
Potpis
Don’t do drugs, sleep deprivation is better.
Re: [Zadatak] - jednostavan?! 14.08.2005. u 23:44 · pre 258 meseci #9
Naravno, ono je samo bio komentar na taj konkretni algoritam (sto sam i napomenuo).
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme