It is currently Wed Sep 08, 2010 4:56 am




Post new topic Reply to topic  [ 8 posts ] 
[Clasa IX]Numere 
Author Message
Moderator

Joined: Fri Jul 27, 2007 3:54 pm
Posts: 610
Post [Clasa IX]Numere
Mayaşii reprezentau numerele în baza 20 prin puncte şi linii astfel:
• un punct înseamnă 1.
• o linie înseamnă 5.
Forma de coajă înseamnă 0 şi ne arată că lipseşte o grupă (o cifră în baza 20).

De exemplu numărul 18 se reprezintă numeric 555111. Valoarea acestui număr în sistemul de numeraţie zecimal se calculează 5+5+5+1+1+1.

Pentru numere mai mari decât 19 grupele de semne se desenează una peste cealaltă iar numeric noi le vom scrie ca grupuri de cifre separate de spaţii.
De exemplu numărul 27 se desenează pe două nivele (are două grupe de semne suprapuse). Numeric îl vom scrie de jos în sus 1 511 şi se calculează 1 * 20¹ + (5+1+1).

Să mai prezentăm ca exemplu un număr ce conţine trei grupe de semne: 11 0 51 - are valoarea (1+1) * 20² + 0 * 20¹ + (5+1)

Dându-se un număr natural în baza 10 să se reprezinte în sistemul de numeraţie Mayaş în forma numerică.

Date de intrare
Fişierul de intrare NUMERE.IN conţine pe prima linie numărul dat.

Date de ieşire
Fişierul de ieşire NUMERE.OUT va conţine pe prima linie atâtea numere câte grupe are reprezentarea numărului dat în forma numerică prezentată mai sus, separate printr-un spaţiu.

Restricţii şi precizări
• În cadrul unei grupe vom afişa sau 0 sau un număr ce poate avea doar cifre de 5 şi de 1. Se observă că 1 se poate repeta cel mult de 4 ori iar 5 se repetă de maxim 3 ori în cadrul unei grupe.
• Dacă un număr conţine într-o grupă atât 1 cât şi 5 cifrele 5 vor apărea obligatoriu înaintea celor de 1
• Numărul citit din fişier este ≤ 900000000

Exemplu
NUMERE.IN
Code:
541

NUMERE.OUT
Code:
1 511 1

Explicaţie
Code:
Proba se poate face astfel:
1*20²+(5+1+1)*20¹+1=400+7*20+1=400+140+1=541


OLI 2006 - Cluj
Timp maxim de execuţie/test : 1 secundă


Solutie oficiala:
Voi revenii cu ea.


Tue Apr 14, 2009 8:57 pm
Profile
New Member

Joined: Sun Dec 20, 2009 11:28 pm
Posts: 13
Post Re: [Clasa IX]Numere
Eheh. Subiectul l-am gasit azi dimineata pe un alt website, si am cautat o rezolvare.
In primul rand, sunt foarte sigur ca s-a strecurat o eroare la numarul 27.
Reprezentarea numerica corecta ar fi exact invers: 1 511 (1* 20^1 + (5+1+1)*20^0=27). Daca faci verificarea lor nu iese 27.
Daca am interpretat gresit enuntul va rog sa ma atentionati.
Rezolvarea propusa de mine:
Code:
#include <stdio.h>
int main()
{
   FILE *fin=fopen("NUMERE.IN","r");
   FILE *fout=fopen("NUMERE.OUT","w");
   long x;
   int v[1000],i,j,k;
   bool spaceneeded=0;
   fscanf(fin,"%ld",&x);
   if(x<=19)
   {
      for(i=1;i<=x/5;i++)
         fprintf(fout,"%d",5);
      for(i=1;i<=x-(5*(x/5));i++)
         fprintf(fout,"%d",1);
   }
   else
   {
      i=0;
      while(x!=0)
      {
         v[i]=x%20;
         x/=20;
         i++;
      }
      for(k=i-1;k>=0;k--)
      {
         if(v[k]!=0)
         {
            for(j=1;j<=v[k]/5;j++)
            {
               fprintf(fout,"%d",5);
               spaceneeded=1;
            }
            for(j=1;j<=v[k]-(5*(v[k]/5));j++)
            {   
               fprintf(fout,"%d",1);
               spaceneeded=1;
            }
            if(spaceneeded)
               fprintf(fout,"%s"," "); //spatiul care delimiteaza grupele
         }
         else
         {
            fprintf(fout,"%d",0);
            fprintf(fout,"%s"," "); //spatiul care delimiteaza grupele
         }
      }
   }
   fclose(fout);
   return 1;
}
// Rezolvare propusa de: Pele Alexandru

In ceea ce priveste eficienta, nu sunt sigur ca e cel mai eficient algoritm de rezolvare. Daca aveti o varianta mai buna, va rog frumos sa nu ezitati sa o postati.


Mon Dec 21, 2009 10:28 pm
Profile
Moderator

Joined: Fri Jul 27, 2007 3:54 pm
Posts: 610
Post Re: [Clasa IX]Numere
Nu am citit codul tau, dar sunt convins ca nu e mai eficient decat un cod ca asta (putina preprocesare :D):

Code:
#include <iostream>
using namespace std;

int v[20]={0,1,11,111,1111,5,51,511,5111,51111,55,551,5511,55111,551111,555,5551,55511,555111,5551111},stiva[10];

int main()
{
int n,i;
cin>>n;
for(i=0;n;n/=20,i++)stiva[i]=v[n%20];
for(i=i-1;i>=0;i--)cout<<stiva[i]<<" ";
}


O rezolvare fara preprocesare care foloseste o functie recursiva:

Code:
#include <iostream>
using namespace std;

void f(int n)
{
if(!n)return;
f(n/20);
if(0==n%20)cout<<0;
else for(int i=n%20;i;i--)
   if(i>=5){cout<<5;i-=4;}
   else cout<<1;
cout<<" ";
}

int main()
{
int n,i;
cin>>n;
f(n);
}


L.E.: Am uitat sa mentionez, rezolvarile le-am scris acum pentru ca mi-am amintit ca nu am postat nicio rezolvare la aceasta problema. Din graba, e posibil sa fi gresit. Daca observati ceva, dati-mi un semn.
Si da, ai dreptate la descompunerea lui 27. Modificat :D.


Mon Dec 21, 2009 11:10 pm
Profile
New Member

Joined: Sun Dec 20, 2009 11:28 pm
Posts: 13
Post Re: [Clasa IX]Numere
Eheh. :wub: Putina explicatie la primul, daca se poate?
N-am nici cea mai mica idee cum functioneaza but AWESOME.


Mon Dec 21, 2009 11:26 pm
Profile
Moderator

Joined: Fri Jul 27, 2007 3:54 pm
Posts: 610
Post Re: [Clasa IX]Numere
Pur si simplu se descompune numarul in baza 20, doar ca la fiecare pas, in loc sa afisam restul obtinut prin impartirea la 20 a numarului, afisam reprezentarea acestuia in sistemul mayas, adica v[r] - presupunand ca r este restul.
Nu stiu daca ai inteles, pentru ca nu prea le am cu explicatul. Daca n-ai inteles, spune-mi si voi incerca sa explic mai bine.


Tue Dec 22, 2009 2:36 pm
Profile
New Member

Joined: Sat Nov 14, 2009 6:08 pm
Posts: 23
Post Re: [Clasa IX]Numere
Salutari,nu m-am descurcat sa fac un topic nou,deci voi scrie aici(cu scuzele de rigoare) Maine am olimpiada locala la informatica,sunt in clasa a 9a,si pana anul acesta (defapt pana vara aceasta) nu am avut tangente cu programarea.noi la scoala am facut numai pseudocod si putin C++(numai teorie,nu am scris niciun program pana acum),insa eu as stii ceva C++,ins anu destul cat sa ma laud...Si aici vine si intrebarea: Am vreo sansa daca nu ma descurc cu C++ ? Si ati putea sa imi dati o problema,sau ceva,sa stiu macar despre ce ar fii vorba?Astazi m-am pus sa recapitulez din caiet si manual(defapt sa recitesc,fiindca stiu pseudocod ca in palma,cel putin ceea ce mi s-a predat)...va rog sa ma ajutati cu un raspuns cat mai repede...


Mon Jan 25, 2010 2:06 pm
Profile
Braincode Team Leader
User avatar

Joined: Mon Sep 10, 2007 11:40 pm
Posts: 2731
Location: Galati
Post Re: [Clasa IX]Numere
Posteaza te rog aici: http://hackpedia.info/viewforum.php?f=121


Mon Jan 25, 2010 2:57 pm
Profile
Banned

Joined: Sat Jul 17, 2010 8:50 am
Posts: 2
Post Re: [Clasa IX]Numere
[sters]


Sat Jul 17, 2010 8:56 am
Profile
 
Post new topic Reply to topic  [ 8 posts ] 


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB © phpBB Group.
Designed by boogiesbc and Vjacheslav Trushkin .