infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Dan-Leonard Crestez din Martie 08, 2004, 20:00:37



Titlul: 008 Cifra
Scris de: Dan-Leonard Crestez din Martie 08, 2004, 20:00:37
Aici puteţi discuta despre problema Cifra (http://infoarena.ro/problema/cifra).


Titlul: 008 Cifra
Scris de: Hlihor Sergiu din Septembrie 01, 2004, 16:51:50
Puteti verifica testele de iesire pt aceasta problema? pt ca eu mi-am verificat programu (pe care evaluatorul imi arunca 10 pct de mila) pana la n=10000  si e corect. Si daca merge pana la 10000 merge SIGUR si pana la 10^100.


Titlul: 008 Cifra
Scris de: Mircea Pasoi din Septembrie 02, 2004, 20:46:36
Citat din mesajul lui: SergiuH
Si daca merge pana la 10000 merge SIGUR si pana la 10^100.


Gresit!!! Nu prea ai cum sa sustii afirmatia asta.. plus gandeste-te ca problema a fost rezolvata de foarte multa lume de 100 de puncte.. asa ca sigur nu e de la noi.


Titlul: 008 Cifra
Scris de: Hlihor Sergiu din Septembrie 03, 2004, 00:02:14
Nu vreau sa par nesimtit pt. ca te contrazic si nici sa deconspir ideea mea de rezolvare, dar, daca "merge" pana la 100, restul numerelor nu mai conteaza, indiferent de cat de mari sunt.


Titlul: 008 Cifra
Scris de: Mircea Pasoi din Septembrie 03, 2004, 20:34:54
Citat din mesajul lui: SergiuH
Nu vreau sa par nesimtit pt. ca te contrazic si nici sa deconspir ideea mea de rezolvare, dar, daca "merge" pana la 100, restul numerelor nu mai conteaza, indiferent de cat de mari sunt.


Pai poate calculezi tu gresit restul impartirii la 100 ... cine stie.. oricum, greseala e de la tine... daca e scurt codul incearca sa-l pui aici sa vedem ce are.


Titlul: 008 Cifra
Scris de: Hlihor Sergiu din Septembrie 03, 2004, 22:32:17
Imi cer scuze ca te-am contrazis, am depistat greseala. Vectoru meu de constante nu era alocat pt 0 si cand trecea de limita, in BP imi dadea zero si mergea pe orice caz da in FP se impusca. Asta e, pe viitor voi compila sursele numa in FP.


Titlul: 008 Cifra
Scris de: nu conteaza din Februarie 17, 2005, 22:49:16
Eu personal nu pot sa inteleg ce are acest program pe evaluatorul meu iau 100 puncte din 100 dar pe site imi da 0 pct.
  Va rog sa-mi explicati ce gresala are.
  Uita-ti codul:
Cod:

  var i,j,n,m,suma:longint;
    f,g:text;

function rez2(x:longint):longint;
var y,h,rez:longint;
begin
     y:=x;
     x:=x mod 10;
     if x=0 then rez:=0;
     if x=1 then rez:=1;
     if x=2 then
       begin
            h:=y mod 4;
            if h=1 then rez:=2;
            if h=2 then rez:=4;
            if h=3 then rez:=8;
            if h=0 then rez:=6;
        end;
     if x=3 then
       begin
            h:=y mod 4;
            if h=1 then rez:=3;
            if h=2 then rez:=9;
            if h=3 then rez:=7;
            if h=0 then rez:=1;
        end;
     if x=4 then
       begin
            h:=y mod 2;
            if h=1 then rez:=4;
            if h=0 then rez:=6;
        end;
     if x=5 then rez:=5;
     if x=6 then rez:=6;
     if x=7 then
       begin
            h:=y mod 4;
            if h=1 then rez:=7;
            if h=2 then rez:=9;
            if h=3 then rez:=3;
            if h=4 then rez:=1;
        end;
     if x=8 then
       begin
           h:=y mod 4;
           if h=1 then rez:=8;
           if h=2 then rez:=4;
           if h=3 then rez:=2;
           if h=0 then rez:=6;
        end;
     if x=9 then
       begin
            h:=y mod 2;
            if h=1 then rez:=9;
            if h=0 then rez:=1;
        end;
     rez2:=rez;
end;

begin
     assign(f,'cifra.out');
     rewrite(f);
     close(f);
     assign(f,'cifra.in');
     reset(f);
     readln(f,m);
     j:=0;
     while j<m do
          begin
               readln(f,n);
               inc(j);
               suma:=0;
               for i:=1 to n do
                  suma:=(suma+rez2(i)) mod 10;
               assign(g,'cifra.out');
               append(g);
               writeln(g,suma mod 10);
               close(g);
           end;
    close(f);
end.


[edited by svalentin] foloseste [*code*][*/code*] (fara *) pentru a formata o sursa corect


Titlul: 008 Cifra
Scris de: Twister din Februarie 18, 2005, 09:01:24
vezi ca     1 ≤ N < 10^100 ; la tine e declarat ca fiind longint;
desi nu m-am uitat pe toata sursa ta cred ca asta ar fi problema


Titlul: 008 Cifra
Scris de: nu conteaza din Februarie 18, 2005, 18:14:59
Mersi. M-am prins eu am crezut ca T<10^100


Titlul: 008 Cifra
Scris de: Haloiu Valentin din Martie 15, 2005, 17:15:40
Va rog frumos spuneti-mi si mie de ce iau o puncte pe aceasta problema:
PPPPPPPPLLLLLLLSSSSSSSSSS

Cod:

#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string.h>
using namespace std;
int funct(int a)
{
if(a==4)
    return 6;
else if(a==8)
{
    if(a%4==0)
    return 6;
    else return 4;
}
else if(a==2)
{
    if(a%4==0)
    return 6;
    else return 4;
}
else if(a==3)
{
    if(a%4==1)
    return 3;
    else return 7;
}
else if(a==7)
{
    if(a%4==1)
    return 7;
    else return 9;
}
else return a;
}
int main()
{
  ifstream fin("cifra.in");
  ofstream fout("cifra.out");
  int t,x,sum,i;
  char n[100],u[2];
  fin>>t;
  for(t;t>0;t--)
  {
  fin>>n;
  if(strlen(n)>=2)
  {
  u[0]=n[strlen(n)-2];
  u[1]=n[strlen(n)-1];
  }
  else u[0]=n[strlen(n)-1];
  if(u[0]=='0')
  {
  u[0]=u[1];
  u[1]='\0';
  }
  x=atoi(u);
  sum=(x/20)*4;
  x=x%20;
  for(i=1;i<=x;i++)
  {
  sum=(sum+funct(i))%10;
  }
  fout<<sum<<endl;
  }
  return 0;
}


[edited by svalentin] foloseste [*code*][*/code*] (fara *) pentru a formata o sursa corect


Titlul: 008 Cifra
Scris de: Dima Alex din Martie 15, 2005, 22:23:10
cel mai mut imi place partea asta:
Citat

if(a==8)

Dar serios, de ce nu folosesti un vector cu raspunsul pt 0->99, n-ar fi greu de generat si programul ar deveni mai simplu. Nu te prea pot ajuta fiindca eu am folosit precomputare si nu ifuri.


Titlul: 008 Cifra
Scris de: Cosmin Negruseri din Martie 15, 2005, 22:28:30
Folositi marcatorul code cand dati paste la cod, ca altfel se duce dracului indentarea codului si nu se mai intelege nimic.


Titlul: 008 Cifra
Scris de: Dima Alex din Martie 15, 2005, 22:43:00
M-am jucat un pic cu sursa ta, sa generez valorile pt 0->99, ca dc merge bine pt alea merge bine pt toate. Interesant ca pt 60 obtin 12 sau ceva de genu asta. nici asa valorile programului tau nu-s la fel cu ale mele. Pana la 6 is la fel, la 7 ii 2, nu 8, pana la 14 nu-s la fel, la 14 is. Mai verifica manual si vezi ce cazuri iti scapa.


Titlul: 008 Cifra
Scris de: Haloiu Valentin din Martie 15, 2005, 22:49:52
Merci pentru ajutor. O sa mai verific odata sa vad ce imi scapa.


Titlul: 008 Cifra
Scris de: Constantin Cristian din Martie 20, 2005, 20:38:19
Am rezolvat problema asta in 2 moduri.

I. Am folosit, ma rog, relatii matematice acolo.... si am facut un algoritm cat de cat eficient pentru care am luat 90 de puncte.

II. Am observat ca pot sa preprocesez solutiile si sa le pun intr-o matrice de 10x10.
    Programul meu arata cam in felul urmator:

deschide fisiere

pentru i = 1 la T
   citeste o valoare
   afiseaza a[penultimacifra][ultimacifra].
sfarsit pentru

inchide fisierele



Cu toate ca al doilea program avea 10 randuri si face de cel putin vreo 10 ori mai putine operatii, am obtinut 80 de puncte. ( timpul de executie a fost depasit pentru ultimele teste).

Am tot auzit de "linia de cache" peste tot pe forum si vreau sa stiu daca asta este problema si in cazul meu. Si chiar daca nu este, vreau ceva informatii despre linia de cache si cum putem evita problemele legate de ea.

Va multumesc!!!


Titlul: 008 Cifra
Scris de: u-92 din Aprilie 09, 2005, 08:13:58
salut
am o intrebare legata de evaluatorul acestei probleme.. sigur e ok? am verificat sursa de multe ori si am verificat pt niste valori cu cineva care a luat 100 puncte si obtineam acelasi rezultat. (iau WA la toate testele.. hmm.. sau poate este un caz particular? nu cred..)


Titlul: 008 Cifra
Scris de: Bogdan-Cristian Tataroiu din Aprilie 09, 2005, 08:32:36
Incearca sa faci un brute force si compara ce da brute forceu si ce face programu tau pt 1 2 3 ...
Oricum acum am si eu o prob: am trimis exact aceeasi sursa pe care luasem 100 pct si acum iau numai 90 pct... Care e problema???? :cry:
....
Ok s-a rezolvat...


Titlul: 008 Cifra
Scris de: u-92 din Aprilie 09, 2005, 13:08:29
am descoperit bugul :P
n-are nimic evaluatorul..


Titlul: 008 Cifra
Scris de: Bunau Florin din Mai 17, 2005, 21:24:46
Poi... pt. cine inca nu s-a apucat de problema... cateva hint-uri
asa de ajutor(e voie?:P)

1. numai ultimele 2 cifre
2. formula
3. 2 siruri constante - sume partiale
4. (((n % 10) * 10) + 2) % 4 -> 0 sau 2

si gata..:P spor la treaba.... :mrgreen:

Am facut prima data prob si era la conditizie if (n % 4)...si luam 0 nu
jtiam ce greseam...si am lasao balta o vreme, daca avetzi acelasi algoritm
si nu stitzi unde atzi gresit....few...sper ca  scapatzi de o zi cu migrene :P :shock:


Titlul: 008 Cifra
Scris de: darlene din Octombrie 20, 2005, 17:19:11
dc numai ultimele 2 cifre??...dc nu merge numai ultima cifra??...:(


Titlul: 008 Cifra
Scris de: Rus Cristian din Octombrie 20, 2005, 18:38:00
fa pentru numere mici...adica...fa un program care sa iti calculeze toate rezultatele pt n=1 pana la n=25 sa zicem...si o sa descoperi de ce numai ultimele 2 conteaza...


Titlul: 008 Cifra
Scris de: Andrei Grigorean din Octombrie 24, 2005, 13:22:46
Citat din mesajul lui: dausyana
dc numai ultimele 2 cifre??...dc nu merge numai ultima cifra??...:(


ptr k restul unui numar la 4 este egal cu restul numarului format din ultimele doua cifre la 4.

Citat din mesajul lui: dausyana
does anybody remember laughter?(


led zeppelin - the song remains the same (filmul - cd2) - stairway to heaven?


Titlul: 008 Cifra
Scris de: darlene din Octombrie 24, 2005, 15:00:07
aha, acum pricep.....mc wefgef...

ps: dap "Does anybody remember laughter?" este din The Song Remains the Same-filmul , Led Zeppelin...:)


Titlul: 008 Cifra
Scris de: Tiberiu-Lucian Florea din Octombrie 24, 2005, 15:16:49
E din concert... ca or fi facut si un film cu el... asta-i altceva.  :P


Titlul: 008 Cifra
Scris de: darlene din Octombrie 24, 2005, 15:58:09
ma rog..concert...:P


Titlul: 008 Cifra
Scris de: Andrei Grigorean din Octombrie 24, 2005, 16:20:00
ideea tot aia e :P


Titlul: 008 Cifra
Scris de: Mircea Dima din Noiembrie 15, 2005, 19:10:55
Imi spune shi mie d c evaluatorul imi da 0pct la pb cifra?
Cod:

#include <stdio.h>
#include <string.h>
int a, b, T,i,j, l, S1, S2, nr;
char x[101];
int v[11]={0, 1, 4, 7, 6, 5, 6, 3, 6, 9};

void calcul()
{

FILE*f=fopen("cifra.in", "r");
FILE*g=fopen("cifra.out", "w");
fscanf(f, "%d\n", &T);
for(i=1;i<=T;i++)
{
for(j=0;j<=100;j++) x[j]=0;
fgets(x, 100, f);
l=strlen(x);
//l--;


if(l>1) a=x[l-2]-'0';
else a=0;
b=x[l-1]-'0';
S1=0;
for(j=0;j<=b;j++) S1+=v[j];
S2=(7*a)%10;
nr=(S1+S2)%10;

fprintf(g,"%d\n", nr);

}
fclose(f);
fclose(g);
}




int main()
{
calcul();
return 0;
}


[edited by svalentin] Folosteste [*code*][*/code*] (fara *) pentru a formata cod!


Titlul: 008 Cifra
Scris de: u-92 din Noiembrie 15, 2005, 20:50:10
fa un brute force pt numerele de la 1 la 99 si compara cu ce afiseaza programul tau.. (apropo daca citeai mai sus gaseai deja acest raspuns)


Titlul: 008 Cifra
Scris de: Adriana Sperlea din Noiembrie 15, 2005, 21:05:16
am generat niste teste random si programul tau da niste raspunsuri complet gresite....asa ca data viitoare mai gandeste-te inainte sa postezi asa codul pe forum...in 99% dintre cazuri evaluatoru isi face datoria corect si evalueaza asa cum trebuie [-X


Titlul: 008 Cifra
Scris de: Mircea Dima din Noiembrie 16, 2005, 08:32:58
Am gasit problema :D trebuia folosit inca un vector cu valori apropiate ........dar totushi  evaluatorul mi-a dat 90 d puncte :|

Va multzumesc oricum pentru efortul depus

[edited by svalentin] posts merged; nu mai posta de 2 ori consecutiv, daca mai ai ceva de adaugat, foloseste edit


Titlul: 008 Cifra
Scris de: Valentin Stanciu din Noiembrie 16, 2005, 10:30:40
Incercati sa nu mai postati programe intregi! (vad ca la problema asta este o moda)
Si daca postati, folositi
Cod:
 
sau butonul "Code" ca sa se formateze corect liniile (sa se mentina taburile si spatiile pt identare)


Titlul: 008 Cifra
Scris de: Lucescu Andrei Bogdan din Decembrie 16, 2005, 17:24:38
nu stiu ce formule ati gasit voi da eu pur si simplu am folosit metoda :

fie x penultima cifra din numar si y ultima cifra (le afli f usor cu putina imaginatie citind char cu char)

Cod:

...

imi i-a 100 p
usor si fara bataie de cap  

daca ce am scris eu e prea explicit va rog stergeti

E prea explicit. Sa nu se mai repete, pentru ca pana stergem noi dau copy/paste/submit destui.


Titlul: 008 Cifra
Scris de: Marius din Ianuarie 03, 2006, 12:25:43
Nu stiu de ce dar mie intotdeauna imi da mesajul "Fisier de iesire lipsa!" la evaluator indiferent de cum modific procedura de scriere. Am si verificat daca fisierul meu de iesire e acelasi cu cel scris in problema si este la fel. Asta e procedura mea de scriere:
Cod:
procedure scriere (n:longint);
var e:text;
begin
assign (e,'cifra.out');
append (e);
writeln (e,n);
close (e);
end;

Poate sa ma ajute cineva, va rog? ](*,)


Titlul: 008 Cifra
Scris de: Valentin Stanciu din Ianuarie 03, 2006, 12:30:48
incearca rewrite(e); in loc de append(e);


Titlul: 008 Cifra
Scris de: Marius din Ianuarie 03, 2006, 12:46:51
Asta am facut-o si in programul principal si in procedura (am mai introdus o variabila locala "i" care o folosesc pentru a citi elementele unui vector si o folosesc in procedura ca sa stearga tot ce e in fisierul de iesire daca i=1).
In orice caz am facut si asa si tot zice ca lipseste fiserul de iesire (singura diferenta este ca in fisierul de iesire imi scrie doar rezultatul pentru ultimul n din fisierul de intrare deoarece procedura de scriere sterge tot cand e apelata).


Titlul: 008 Cifra
Scris de: Valentin Stanciu din Ianuarie 03, 2006, 13:01:58
poti sa incerci sa faci un programel mic care tot ce face este sa deschida fisierul .out, sa scrie ceva in el (1 de exemplu) si apoi sa il inchizi; vezi daca iti da aceeasi eroare

apoi uite o sugestie (daca am inteles eu bine cum faci tu): tu deschizi fisierul odata la inceput, apoi de fiecare data cand e apelata functia aia;
nu mai inchide fisierul; deschide-l odata la inceput cu rewirte, apoi lasa-l deschis, nu mai apela close; cand vrei sa mai adaugi ceva, pur si simplu mai scrii in fisier (desigur, variabila de fisier este globala); si inainte sa iesi din program inchizi fisierul. In cazul in care iesi fortat cu halt (parca asta era in pascal); poti sa iti faci o procedura care intai inchide fisierul apoi apeleaza halt.

Note: sistemul de operare trece toate operatiile de IO printr-un cache (si bine face :) ), dar daca ai mai multe teste intr-un fisier, e bine sa il fortezi sa scrie  in fisier (nu numai in cache) dupa fiecare test caclulat; pentru asta ai o functie (sau procedura, zi-i cum vrei...) flush sau ceva asemanator. Atentie insa, asta o sa iti creasca timpul de executie!
E bine sa-l fortezi sa scrie efectiv in fisier in cazuri in care programul tau poate iese din timp uneori sau mai da erori uneori si se acorda punctaje partiale.


Titlul: 008 Cifra
Scris de: Marius din Ianuarie 03, 2006, 13:54:43
Am incercat sa fac programelul mic si mi-a mers (a zis raspuns gresit, deci a vazut ca am fisierul de iesire :) ).
Am incercat sa fac programul meu dupa sugestia ta (variabila globala "e", deschid cu "rewrite", procedura doar adauga in fisier,  inchid fisierul la sfarsitul programului, etc.) si tot imi da "fisier de iesire lipsa". :(
Mie imi merge perfect, insa evaluatorul tot zice ca lipseste fisierul de iesire.


Titlul: 008 Cifra
Scris de: Valentin Stanciu din Ianuarie 03, 2006, 14:34:07
vezi sa nu fi gresit numele fisierului sau ceva de genul acesta


Titlul: 008 Cifra
Scris de: Marius din Ianuarie 03, 2006, 15:03:42
Am zis in primul post ca am verificat daca am gresit numele ("Am si verificat daca fisierul meu de iesire e acelasi cu cel scris in problema si este la fel"). :P .
Oricum as face (cu close in procedura sau in programul principal) tot nu vede evaluatorul fisierul de iesire (desi la mine merge).
Am tot incercat alte modalitati de 3 zile incoace, dar daca n-a mers am zis sa apelez la forum. Nu pot sa postez tot programul aici, nu?


Titlul: 008 Cifra
Scris de: Valentin Stanciu din Ianuarie 03, 2006, 15:37:55
nu.. dar poti sa trimiti pm/ mail cuiva care vrea sa se uite peste ea si a facut problema (eu de exemplu nu am facut problema asta)
sau poti sa incerci sa postezi doar bucatiile de cod legate de IO, insa cu tot cu structurile repetitive sau functiile din care fac parte; adica ceva de genul:

Cod:

var
a:array[1..100] of integer;
e:text;

procedure scrie(i:integer)
begin
   [...]
   writeln(e,a[i]);
   [...]
end;

[...]

begin
   assign(e,'cifra.out');
   rewrite(e);
   readln(ceva);
   [...]
   for i=1 to n do scrie();
   [...]
   close(e);
end.


Titlul: 008 Cifra
Scris de: Marius din Ianuarie 03, 2006, 15:58:41
Atunci o sa postez aici progamul principal si procedura de scriere, sper sa fie de folos.
Cod:
program cifra;
type vector=array [0..20]of longint;
var n,i:longint;
a:vector;
[...]

procedure scriere (c:longint);
var e:text;
begin
assign (e,'cifra.out');
if i=1 then
rewrite (e);
append (e);
writeln (e,c);
close (e);
end;

[...]

begin
citire (n,a);
for i:=1 to n do
scriere (suma(a[i]));
end.

Sper sa nu fie vreo problema.
Apropo, multumesc mult pentru ajutor. :)


Titlul: 008 Cifra
Scris de: Valentin Stanciu din Ianuarie 03, 2006, 19:07:26
uite-te putin la:
Cod:
if i=1 then
rewrite (e);
append (e);


daca i este 1 se executa:
rewrite (e);
append (e);
... nu stiu exact ce se intampla in acest caz, dar pune un else pe-acolo

Cod:
if i=1 then
   rewrite (e)
else append (e);


Titlul: 008 Cifra
Scris de: Marius din Ianuarie 03, 2006, 19:43:40
Cred ca daca nu pun begin dupa un if atuncia programul urmeaza doar prima instructiune (daca conditia e indeplinita) , nu urmatoarele 2 (ca altfel mi-ar fi scris doar primul rezultat deoarece s-a inchis fisierul si "append (e)" nu mai e luat in calcul cand i=2).
In orice caz am incercat si asa, si tot nu merge. :( Am incercat sa fac si cu conditia in principala, stergand-o din procedura, nimic.


Titlul: 008 Cifra
Scris de: ditzone din Ianuarie 03, 2006, 22:59:24
Dar de ce tii neaparat sa folosesi procedura append ? .... Eu unu nu tin minte sa o fi folosit vreodata in vreun program...
Poti pur si simplu sa deschizi fisieru la inceputu programului... scrii ce ai nevoie si inchizi la sfarsit.


Titlul: 008 Cifra
Scris de: Valentin Stanciu din Ianuarie 04, 2006, 11:06:57
Citat din mesajul lui: Cloud
Cred ca daca nu pun begin dupa un if atuncia programul urmeaza doar prima instructiune (daca conditia e indeplinita) , nu urmatoarele 2 (ca altfel mi-ar fi scris doar primul rezultat deoarece s-a inchis fisierul si "append (e)" nu mai e luat in calcul cand i=2).
In orice caz am incercat si asa, si tot nu merge. :( Am incercat sa fac si cu conditia in principala, stergand-o din procedura, nimic.


da asa e! dar append(e) se executa indiferent de valoarea lui i! deci daca i este 1 se executa si rewrite si append, daca i este 2 se executa doar 2...
dar oricum, e mult mai bine (si mult mai rapid) sa nu mai inchizi fisierul si sa il deschizi de 1000 de ori; la fel cu a zis si ditzone, la fel cu am zis si eu; cel mai bine deschizi fisierul la inceput cu rewrite si il inchizi la sfarsit.

mai mult nu stiu ce poate sa aiba programul tau...


Titlul: 008 Cifra
Scris de: Marius din Ianuarie 04, 2006, 16:28:48
Citat
dar oricum, e mult mai bine (si mult mai rapid) sa nu mai inchizi fisierul si sa il deschizi de 1000 de ori; la fel cu a zis si ditzone, la fel cu am zis si eu; cel mai bine deschizi fisierul la inceput cu rewrite si il inchizi la sfarsit.
Da, ai dreptate. Acum m-am gandit scrierea repetata pe hard consuma mai mult timp decat daca le-as trece in cache si dupa ce am terminat progamul sa le trec din cache in fisier. :oops:
Pana la urma am aflat problema: programul se bloca la citire. Era o conditie care n-am vazut-o prea bine :1 ≤ N < 10^100. Eu l-am pus in program pe n ca longint, si desigur ca daca la teste se foloseau numere foarte mari, programul dadea eroare inainte sa scrie ceva in fisier. Ghinionul meu era ca toate testele foloseau numere mari, deci d-asta imi dadea mie eroarea. Problema rezolvata scriind numerele in string si apoi atribuind lui n numai ultimele 2 cifre din nr. :D
Acuma problema mea e ca-mi da raspuns gresit, dar de asta pot sa ma ocup si eu!  :mrgreen:  Multumesc pentru ajutor!


Titlul: 008 Cifra
Scris de: Sima Mihai Cotizo -vechi din Ianuarie 05, 2006, 09:54:56
Citat din mesajul lui: Cloud
Atunci o sa postez aici progamul principal si procedura de scriere, sper sa fie de folos.

program cifra;
type vector=array [0..20]of longint;


mai uite-te aici ;) sa vezi daca nu sunt cam putine elem in vector... asta daca folosesti vectorii care sunt declarati "vector" la ce cred eu... :P


Titlul: 008 Cifra
Scris de: Iacob Ioan Fanica din Ianuarie 19, 2006, 00:30:37
Am observat ca se repeta din 100 in 100 si am luat in calcul ultimele doua cifre. Am facut inmultirea pe numerele mari si apoi afisam rezultatul.Da iau 0 puncte. De ce?
Am scris in fisier 120 de nr si am calculat pentru 30 matematic, cu calculatorul si mi-au dat ca si in fisierul de iesire da tot zero puncte iau.
Oricum la adunare si inmultire conteaza numai ultima cifra.
Imi poate spune si mie cineva va rog ce am gresit in sursa urmatoare?
Cod:
#include <fstream.h>
ifstream f("cifra.in");
ofstream g("cifra.out");
int u=0,i,j,n,p;
int put(int k)
{
 int h,ul=1;
 for(h=1;h<=k;h++)
 {
  ul=ul*k;
  ul=ul%10;
 }
 return ul;
}
int main()
{
 f>>n;
 for(i=1;i<=n;i++)
 {
  f>>p;
  p=p%100;
  u=0;
  for(j=1;j<=p;j++)
  {
   u+=put(j);
   u=u%10;
  }
  g<<u<<"\n";
 }
 return 0;
}
](*,)
Am tot incercat si incercat zile in sir da nu imi iese nimic.  :?:


Titlul: 008 Cifra
Scris de: Andrei Grigorean din Ianuarie 19, 2006, 22:06:03
hint: cat iti da ptr 100?


Titlul: 008 Cifra
Scris de: Iacob Ioan Fanica din Ianuarie 24, 2006, 13:32:44
Pentru 100 imi da 0.
Asta e fisieru meu de iesire avand in cel de intrare 120 de numere pornind de la 1......pana la 120
[...] - era prea explicit :-)
Nu stiam ca e bun. Da greseam cand puneam limitele si voiam sa il streg si eu de aici.
Deci cifra.out este:
1
5
2
8
3
.
.
.restul  va las acuma sa il descoperiti.


Titlul: 008 Cifra
Scris de: Andrei Grigorean din Ianuarie 24, 2006, 14:56:57
e bine.

poi fa un vector de constante cu 100 de elemente si afiseaza. totusi da un edit la postul de mai sus ptr a evita incidente gen copy paste.


Titlul: 008 Cifra
Scris de: Toth Lehel din Martie 21, 2006, 20:54:48
Hy. Am un vektor de la 0 la 99, in care sunt numerele. Daca primesc un numar ex. 1762 atunci solutia este vektor[1762 mod 100].  Cateva exemple : 1 = 1; 10 = 7; 176 = 6 ; 987654321 = 5 ; 374 = 5 ; 1762 = 7 ;
 Primul test OK, la celelalte primesc raspuns gresit. Imi puteti da cateva exemple la care gresesc? Sau daca stie cineva numerele din teste.
     Mersi


Titlul: 008 Cifra
Scris de: Filip Cristian Buruiana din Martie 21, 2006, 21:27:30
Te-ai gandit ca numerele nu se incadreaza in long? Numerele citite au pana la 100 cifre.


Titlul: 008 Cifra
Scris de: Toth Lehel din Martie 22, 2006, 10:15:39
Mersi. Acum iau 100. Citesc intr-un string, si folosesc ultimi caracteri..:)


Titlul: Raspuns: 008 Cifra
Scris de: cnuteam din Aprilie 07, 2006, 14:06:03
 Am si eu o problema. am facut faza cu vectorul si cu (n mod 100),cand foloseam long mergea primul test si cand am folosit string imi da 0 ](*,).Puteti sa dati un test sa vad unde-i greseala?


Titlul: Raspuns: 008 Cifra
Scris de: ditzone din Aprilie 07, 2006, 14:38:35
Citeste si posturile anterioare..  o sa gasesti cateva exemplu...


Titlul: Raspuns: 008 Cifra
Scris de: Dragos Dumitrescu din Aprilie 07, 2006, 18:56:09
m-am tot chinuit la problema asta si nu imi dau seama ! Am facut sa mearga cu 100 cifre dupa ce il memorez intr-un string si salvez ultimele 2 cifre...dar care este formula? ca daca fac fara formula iese din timp  :fighting:


Titlul: Raspuns: 008 Cifra
Scris de: andreit1 din Aprilie 07, 2006, 19:09:35
Singura 'forumla' necesara este faptul ca poti sa iei numarul din fisierul de intrare modulo 100. Cat timp sunt numai 100 de valori le poti calcula la inceputul programului si dupa asta ai O(1) al fiecare intrebare.


Titlul: Raspuns: 008 Cifra
Scris de: cnuteam din Aprilie 09, 2006, 10:07:53
Explicati-mi si mie ce-i gresit la asta.

#include<fstream.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
ifstream in ("cifra.in");
ofstream out ("cifra.out");
int t,x,i,d,a[22]={0,1,5,2,8,3,9,2,8,7,7,8,4,7,3,8,4,1,5,4,4};
char n[102];
int main()
{in>>t;x=0;
 for(i=1;i<=t;i++)
{in>>n;
d=strlen(n);
if(n[d-2])
x=int((n[d-2])-48)*10+int(n[d-1])-48;
else x=int(n[d-1])-48;
out<<((x/10)*4+a[x%20])%10<<endl;}
in.close();
out.close();
return 0;}



Titlul: Raspuns: 008 Cifra
Scris de: Savin Tiberiu din Aprilie 09, 2006, 10:45:32
cum ai descoperit u vectoru ala de constante. Parerea mea ca acolo e gresheala. dati si u un test de 100 nr cu 1,2,3,..100 si vezi dak iti merge. Vezi ca u perioada o ai din 100 in 100 nu din 22 in 22 cum ai scris u acolo. Topicul asta are 2 pagini citeshte toate posturile shi vei gasi o gramada de indicatii.


Titlul: Raspuns: 008 Cifra
Scris de: cnuteam din Aprilie 09, 2006, 12:14:27
Ms mult pt sugestia cu 1 la 100.Astfel am depistat greseala si am luat 100 de puncte :yahoo:.In legatura cu problema,eu mergeam din 20 in 20 si inmulteam cu 4 la fiecare 20. Oricum ms mult.


Titlul: Raspuns: 008 Cifra
Scris de: George Pascu din Octombrie 31, 2006, 21:01:56
Salut, sunt nou pe forum si acum am probleme cu problema 008...nu inteleg de ce obtin TLE...mi se pare destul de eficienta...ma puteti ajuta...putin? multumesc

Cod:
 ... 


Titlul: Raspuns: 008 Cifra
Scris de: ditzone din Octombrie 31, 2006, 21:26:08
Citat
1 ≤ N < 10100
Tu ai declarat acolo n de tip long si nu poti retine un numar atat de mare.
Pe langa asta tu parcurgi toate numerele de la 1 la N care dureaza destul de mult pentru  N > 10 000 000....
Incearca sa dai niste teste la tine pe calculator... ceva mai mari ...


Titlul: Raspuns: 008 Cifra
Scris de: George Pascu din Noiembrie 01, 2006, 16:41:47
da...corect...multumesc:D


Titlul: Raspuns: 008 Cifra
Scris de: Jecan Daniel Valerian din Februarie 07, 2007, 19:07:49
Am si eu unele dificultati cu aceasta problema...
Am calculat valorile din vectorul de constante dar la evaluare am numai raspunsuri gresite...

Valorile mele par ok si din cate am vazut in posturile anterioare le-am calculat bine...

I need some help...


Titlul: Raspuns: 008 Cifra
Scris de: Ivan Nicolae din Februarie 07, 2007, 19:30:13
pai da si tu ceva mai multe detalii, ca asta e cam larg: ai aflat vectorul de constante(aici deja apar doua posibilitati: l-ai aflat bine sau nu l-ai aflaat bine). In cazul in care nu l-ai aflat bine.... ai descoperit greseala , in cazul in care l-ai aflat bine inseamna ca ai alte greseli prin cod (si aici nu poate a te ajute nimeni... in lipsa de detalii).

[Later Added] Fa si tu un program dasta asa mai taranesc(daca n-ai facut deja unu, daca ai facut..... fa-l din nou) si compara rezultatele date de cele doua programe pestru teste mai ciudate cum ar fi (90, 102,110,150,201,205)


Titlul: Raspuns: 008 Cifra
Scris de: Jecan Daniel Valerian din Februarie 08, 2007, 16:42:24
Acum obtin 20 de puncte...si restul raspunsuri gresite...
Am verificat cu doua programe sa vad daca imi ies aceleasi rezultate si intr-adevar ies aceleasi rezultate...

Cod nu pot sa pun pentru ca e prea explicit... :sad:


Titlul: Raspuns: 008 Cifra
Scris de: Adrian Diaconu din Februarie 08, 2007, 16:56:06
Citat
1 < N < 10100
N nu se incadreaza in vreun tip de date intreg, trebuie citit ca sir de caractere.

Daca citeai cateva posturi mai sus ai fi gasit raspunsul.


Titlul: Raspuns: 008 Cifra
Scris de: Jecan Daniel Valerian din Februarie 08, 2007, 17:00:14
Am gasit greseala...
Nu era din cauza tipului de date...pentru ca am lucrat cu siruri de caractere...
Thanks anyway...

Oricum acum am 100 de puncte la problema :yahoo:


Titlul: Raspuns: 008 Cifra
Scris de: Iacob Eduard din Februarie 13, 2007, 19:44:55
1)Am si eu o curiozitate.Cum se poate demonstra matematic ca se repeta din 100 in 100?
2)puteti sa imi spuneti ce am gresit in solutia:
Cod:
#include<fstream.h>
#include<string.h>
#include<stdlib.h>

int main()
{
ifstream fin("cifra.in");
ofstream fout("cifra.out");
int r[10][10];
r[0][0]=0,r[0][1]=1,r[0][2]=5,r[0][3]=2,r[0][4]=8,r[0][5]=3,r[0][6]=9,r[0][7]=2,r[0][8]=8,r[0][9]=7;
r[1][0]=7,r[1][1]=8,r[1][2]=2,r[1][3]=9,r[1][4]=5,r[1][5]=0,r[1][6]=6,r[1][7]=9,r[1][8]=5,r[1][9]=4;
r[2][0]=4,r[2][1]=5,r[2][2]=9,r[2][3]=6,r[2][4]=2,r[2][5]=7,r[2][6]=3,r[2][7]=6,r[2][8]=2,r[2][9]=1;
r[3][0]=1,r[3][1]=2,r[3][2]=6,r[3][3]=3,r[3][4]=9,r[3][5]=4,r[3][6]=0,r[3][7]=3,r[3][8]=9,r[3][9]=8;
r[4][0]=8,r[4][1]=9,r[4][2]=3,r[4][3]=0,r[4][4]=6,r[4][5]=1,r[4][6]=7,r[4][7]=0,r[4][8]=6,r[4][9]=5;
r[5][0]=5,r[5][1]=6,r[5][2]=0,r[5][3]=7,r[5][4]=3,r[5][5]=8,r[5][6]=4,r[5][7]=7,r[5][8]=3,r[5][9]=2;
r[6][0]=2,r[6][1]=3,r[6][2]=7,r[6][3]=4,r[6][4]=0,r[6][5]=5,r[6][6]=1,r[6][7]=4,r[6][8]=0,r[6][9]=9;
r[7][0]=9,r[7][1]=0,r[7][2]=4,r[7][3]=1,r[7][4]=7,r[7][5]=2,r[7][6]=8,r[7][7]=1,r[7][8]=7,r[7][9]=6;
r[8][0]=6,r[8][1]=7,r[8][2]=1,r[8][3]=8,r[8][4]=4,r[8][5]=9,r[8][6]=5,r[8][7]=8,r[8][8]=4,r[8][9]=3;
r[9][0]=3,r[9][1]=4,r[9][2]=8,r[9][3]=5,r[9][4]=1,r[9][5]=6,r[9][6]=2,r[9][7]=5,r[9][8]=1,r[9][9]=0;
long int T;
int x;
char n[100],u[2];
fin>>T;
for(int i=1;i<=T;i++)
  {
  int UltimaCifra,PenultimaCifra;
  fin>>n;
  if(strlen(n)>=2)
    {
    u[0]=n[strlen(n)-2];
    u[1]=n[strlen(n)-1];
    x=atoi(u);
    UltimaCifra=x%10;
    x=x/10;
    PenultimaCifra=x%10;
    }

  else
    {
    char *a=n;
    x=atoi(a);
    UltimaCifra=x%10;
    PenultimaCifra=0;
    }
  fout<<r[PenultimaCifra][UltimaCifra] ;
  }
fout<<"/n";
return 0;
}
Am scris manual toate rezultatele de la 0 la 99 ,dar am raspunsuri gresite.unde am gresit?Oare sa fie de la matricea r(sa fi gresit vreo valoare),sau e ceva de programare?
[lateredit]Miam dat seama ce am gresit,si mi-am dat seama si cum se demonstreaza matematic.


Titlul: Raspuns: 008 Cifra
Scris de: Florian Marcu din Februarie 15, 2007, 22:01:28
Am reusit sa iau 100 :yahoo:..in sfarsit...deci numai ultimile 2 cifre conteaza....un indiciu: un vector de 100 de....elmente....si citire cu stringuri.....:-'


Titlul: Raspuns: 008 Cifra
Scris de: Iacob Eduard din Februarie 17, 2007, 20:35:10
Ce are ultimul test,ca obtin WA?Poate vi s-a intamplat si voua,nu stiti ce are?La restul testelor obtin raspuns corect(deci 90 p in total),deci nu prea imi dau seama ce poate sa se fi intamplat


Titlul: Răspuns: 008 Cifra
Scris de: Nicodei Eduard din Martie 20, 2007, 00:29:56
daca folosesc fstream-urile iau 70 pct ](*,). daca merg pe FILE, i-au 100 pct.  :winner1: (problema in rest este identica)


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Aprilie 02, 2007, 18:57:10
Sunt total debusolat...poate ca sunt si prea obosit, dar nu stiu ce nu-i in regula cu rezolvarea mea...poate vectorul cu solutii pana la 100, desi l-am generat de nu mai stiu cate ori...

1,5,2,8,3,9,2,8,7,7,8,2,9,5,0,6,9,5,4,4,5,9,6,2,7,3,6,2,1,1,2,6,3,9,4,0,3,9,8,8,9,3,0,6,1,7,0,6,5,5,
6,0,7,3,8,4,7,3,2,2,3,7,4,0,5,1,4,0,9,9,0,4,1,7,2,8,1,7,6,6,7,1,8,4,9,5,8,4,3,3,4,8,5,1,6,2,5,1,0,0.

Si am citit intr-un string... ar putea sa ma ajute cineva pls?


Titlul: Răspuns: 008 Cifra
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 19:16:51
Nu e bun vectorul. Nu-mi dau seama unde ai gresit dar numai primele pozitii sunt perfecte. Dupa aceea deja nu mai sunt bune. Incearca sa generezi vectorul pentru 0..99. Restul impartirii unui numar la 100 este intre 0 si 99 si primul numar din vector astfel ar fi 0.

Ar trebui sa mearga si pe vectorul tau daca ai pune v[i+1], dar din pacate nu e generat corect. Daca e ok cu adminii, pune codul de generare al vectorului aici sa ne uitam pe el.


Titlul: Răspuns: 008 Cifra
Scris de: Savin Tiberiu din Aprilie 02, 2007, 19:18:49
pai in poti sa te uiti pur si simplu la a 3-a pozitie. 1+4+9=14
14%10=4 nu 2


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Aprilie 02, 2007, 19:40:00
poti sa stii ca 1+4+27=32 si 32%10=2...in formula ii 1^1+2^2+3^3+n^n si ^ ="la puterea" nu xor
sry dar asa ii cum zic eu...dar in rest banuiesc ca are greseli :P


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Aprilie 02, 2007, 19:47:52
Citat
Ar trebui sa mearga si pe vectorul tau daca ai pune v[i+1], dar din pacate nu e generat corect. Daca e ok cu adminii, pune codul de generare al vectorului aici sa ne uitam pe el.
eu am luat v[i-1]...adica am luat pt n=1 raspunsul este v[i-1]==v[0]==1
Asta ar fi codul pt generare
Cod:
for(i=1;i<=n;i++)
{       aux=i%10;
if(aux!=0)
{ S+=(long long)pow(aux,aux);
S%=10;
}
}
fout<<S%10<<",";
si am mai avut unul in care se repeta din 50 in 50...dar nu stiu unde am gresit...poate maine gasesc singur ca acum chiar am obosit dupa 4 ore numai pe problema asta...


Titlul: Răspuns: 008 Cifra
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 19:56:52
Din nefericire trebuie considerate ultimele doua cifre. De exemplu pentru 13 u[3^3] = 7 pe cand u[13^13] = 3, unde u[a] este ultima cifra a lui a. De altfel nu ai nevoie sa calculezi in long long. Daca in permanenta inmultesti doar ultima cifra cu "aux" obtii acelasi rezultat in long. Trebuie doar sa iei "aux = i%100" si ar trebui sa mearga.

P.S. v[0] trebuie sa fie 0.


Titlul: Răspuns: 008 Cifra
Scris de: Savin Tiberiu din Aprilie 02, 2007, 20:24:46
Citat
poti sa stii ca 1+4+27=32 si 32%10=2...in formula ii 1^1+2^2+3^3+n^n si ^ ="la puterea" nu xor
sry dar asa ii cum zic eu...dar in rest banuiesc ca are greseli

oops, my bad!  :peace:


Titlul: Răspuns: 008 Cifra
Scris de: razyelx din Aprilie 02, 2007, 22:24:29
salut manu... si voua la fel... mda... deci eu am facut pb merge de minune pe nr mari super wow. am facut si un force brut sa vad daca e corect.. bun. dar p e evaluator iau 0. si acum metoda folosita. Citesc caracter cu carater. Iau ultimele ciprie s=7*nr[i-1] initial nr[0]=0; si apoi iau un for de la nr[i-1]*10 la nr[i-1]*10+nr si calculez ultima cifra al fiecaruia si adaug la suma. care e pb lui... pls help


Titlul: Răspuns: 008 Cifra
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 22:35:03
salut manu... si voua la fel... mda... deci eu am facut pb merge de minune pe nr mari super wow. am facut si un force brut sa vad daca e corect.. bun. dar p e evaluator iau 0. si acum metoda folosita. Citesc caracter cu carater. Iau ultimele ciprie s=7*nr[i-1] initial nr[0]=0; si apoi iau un for de la nr[i-1]*10 la nr[i-1]*10+nr si calculez ultima cifra al fiecaruia si adaug la suma. care e pb lui... pls help
Nu prea imi dau seama cum faci, fii mai explicit putin. Iar daca esti sigur ca e corect, sa te uiti la raportul evaluatorului, pare sa fie o solutie care iese din timp. Oricum, daca citesti posturile de mai sus pentru aceasta problema cu siguranta vei gasi informatii folositoare!  :thumbup:


Titlul: Răspuns: 008 Cifra
Scris de: razyelx din Aprilie 02, 2007, 22:40:55
mda... iese din timp la 2 teste dar nu asta e imp... deci
1)citesc char cu char
2)iau penultima cifra din nr citit si o inmultesc cu 7 pe ca oricare 10 nr adunate asa(1^1+2^2...) dau suma 7
3)formula este s=7*nr[i-1], dar in cazul in care avem doar o cifra s=0. de ce? pt ca nr[0]=0, si i va ramane la val initiala adik 1.
4)dupa toate se intampla ceva de genu: avem 2345: for(i=40;i<=45;i++) si calculex ultima cifra lui i la i%10;
5)atat
deci el functioneaza, dar nusth


Titlul: Răspuns: 008 Cifra
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 22:47:38
Citat
pe ca oricare 10 nr adunate asa(1^1+2^2...) dau suma 7

Am verificat asta pe cateva exemple si pe primele 10 numere da adevarata dar mai departe e falsa. Poti sa demonstrezi afirmatia asta ?


Titlul: Răspuns: 008 Cifra
Scris de: razyelx din Aprilie 02, 2007, 22:53:48
eu am testat si pe 10->19 si e ok numa ca se schimba unele locuri de ultime cifre... dar suma lor e tot 47... banuiesc ... daca nu e asa poti sa imi postezi un exemplu cum ai calculat poate ca ma insel .... rau si at asta e sursa pb


Titlul: Răspuns: 008 Cifra
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 23:18:39
M-am inselat... chiar merge  =D&gt; Am facut eu o greseala la verificare  :oops: Cel mai probabil ai o greseala la implementare sau iti iese afara din tipul folosit. Daca folosest int (sau integer) incearca sa pui long (sau longint) si vezi daca tot 0 iei.

Pune un post cu citirea. Cum citesti char cu char ? Poate nu verifici ca ultimul sa fie '0'..'9' iar in fisierele lor de intrare ultimul e "ENTER". S-ar explica de ce iei numai 0 peste tot.


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Aprilie 03, 2007, 09:57:44
Citat
oops, my bad!  Peace

No problem...se mai intampla :peacefingers:


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Aprilie 03, 2007, 09:59:16
Citat
Din nefericire trebuie considerate ultimele doua cifre...

Sry...nu am fost atent la ce s-a mai postat pe forum...Multumesc!


Titlul: Răspuns: 008 Cifra
Scris de: razyelx din Aprilie 03, 2007, 10:28:07
teoretic ai dreptate dar practic eu am luat in calcul si '\n'.
codul ar fi cam ceva de genu:
Cod:
nre[0]=0;
i=0;
do{
      fscanf(f,"%c", &nr);
      if(nr!='\n')nre[++i]=nr-48;
}while(nr!=10&&!feof(f));


Titlul: Răspuns: 008 Cifra
Scris de: Pandia Gheorghe din Aprilie 03, 2007, 10:40:09
Si daca ultimul caracter e spatiu ( ' ' ) sau tab ?

Anyway... daca nici asa nu merge creaza cu algoritmul tau un vector pentru numerele de la 1 la 100 si posteaza-l sa ne uitam de unde nu mai e bine.  :ok:


Titlul: Răspuns: 008 Cifra
Scris de: razyelx din Aprilie 03, 2007, 11:18:01
deci dap m-am prins de aia si am facut:
Cod:
nre[0]=0;
i=0;
do{
fscanf(f,"%c", &nr);
if((nr>=48&&nr<=57)&&!feof(f))nre[++i]=nr-48;
}while((nr>=48&&nr<=57)&&!feof(f));
si sirul meu e ceva de genu(0-100):
0 1 5 2 8 3 9 2 8 7 7 8 4 7 3 8 4 1 5 4 4 5 9 2 8 3 9 2 8 7 1 2 8 5 1 6 2 9 3 2 8 9 3 6 2 7 3 6 2 1 5 6 2 5 1 6 2 9 3 2 2 3 2 4 0 5 1 4 0 9 9 0 6 9 5 0 6 3 7 6 6 7 1 4 0 5 1 4 0 9 3 4 0 7 3 8 4 1 5 4 0 0


Titlul: Răspuns: 008 Cifra
Scris de: Pandia Gheorghe din Aprilie 03, 2007, 11:24:32
De pe pozitia 24 incolo e deja gresit. Nu-mi dau seama unde ai gresit in algoritm, poate ca intr-adevar calculez in asa fel incat iese din tipul de date pe care il folosesti ( int sau long ). Verifica cu un Brute-Force pentru 24 sa vezi ca nu mai coincide... pana nu vad algoritmul de generare nu pot sa zic mai mult, dar cred ca folosirea tipurilor e greseala.


Titlul: Răspuns: 008 Cifra
Scris de: razyelx din Aprilie 03, 2007, 14:15:54
mi-am corectat greseala era doar o greseala de matematica... ce sa facem algebra asta... numa ca algorimtul nu e prea eficient si iau doar 70 ca nu intra in timp... dar o fac cu preprocesare indata si 100-a e a mea ms de sfaturi :yahoo:


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Aprilie 03, 2007, 15:06:19
In sfarsit am reusit sa iau 100 pcte!  :yahoo: Ms mult de sfaturi!


Titlul: probleme
Scris de: florea cristian din Aprilie 24, 2007, 21:17:39
imi spuneti si mie dc imi da non-zero exit status la acest program?... de calculat calculeaza foarte bine ultima cifra numai ca nu am pus inca pe numere mari....puteti incerca pe calculator si sper sa ma puteti ajuta


type vector=array[0..20]of byte;
const sum:vector=(0,1,5,2,8,3,9,2,8,7,7,8,4,7,3,8,4,1,5,4,4);
var t,i,e:integer;
    fi,fo:text;
    n,rasp:int64;
begin
     assign(fi,'cifra.in'); reset(fi);
     assign(fo,'cifra.out'); rewrite(fo);
     readln(fi,t);
     for i:=1 to t do
        begin
             readln(fi,n);
             rasp:=(n div 20)*sum[20]+sum[n mod 20];
             rasp:=rasp mod 10;
             writeln(fo,rasp);
        end;
     close(fi);
     close(fo);
end.


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Aprilie 25, 2007, 12:21:11
Deci..in primul rand nu este nevoie de operatii pe numere mari! (vezi ceea ce s-a scris in acest topic).  Cat despre non-zero exit status , desi nu stiu pascal, probabil returnezi vreo valoare diferita de 0; Cel mai probabil ai uitat return 0; sau ceva similar.....vezi prin documentatia despre evaluator, de pe site. :thumbup:


Titlul: Răspuns: 008 Cifra
Scris de: Savin Tiberiu din Aprilie 25, 2007, 13:00:45
in pascal nu trebuie sa pui return 0. Nush exact de ce primesti aceasta eroare, incearca sa iti pui acasa un IDE care foloseste acelasi compilator cu cel de pe infoarena (fpc nush cat), si da-ti multe teste.


Titlul: Răspuns: 008 Cifra
Scris de: Gogu Marian din Aprilie 25, 2007, 13:07:47
Cel mai probabil ti se trage de la instructiune "readln(fi,n);"
Cand numarul e prea mare sa intre in int64, crapa programul.
Citeste numarul ca un string si calculeaza numarul mod 100 folosind doar ultimele doua cifre ale lui.
Si poti sa consideri n mod 20 = (n mod 100) mod 20.


Titlul: Răspuns: 008 Cifra
Scris de: florea cristian din Aprilie 25, 2007, 13:13:45
Multumesc pt sfaturi gogu,devilkind si florian,dar cauza nu era nici una din care ati spus voi....am implemenatat oricum deja de ieri al algoritm si am luat 100


Titlul: Răspuns: 008 Cifra
Scris de: Gabriel Bitis din Aprilie 25, 2007, 18:18:37
Citat
Ce are ultimul test,ca obtin WA?Poate vi s-a intamplat si voua,nu stiti ce are?La restul testelor obtin raspuns corect(deci 90 p in total),deci nu prea imi dau seama ce poate sa se fi intamplat
Aceeasi problema o am si eu...m'am uitat pe forum si nu i'a raspuns nimeni lui Eduard... poate cineva sa spuna ce e cu ultimul test? :oops:


Later edit:  Never mind... citeam N'ul ca pe un sir de caractere de lungime maxima 101 (luand in calcul '\n'), am modificat dimensiunea la 102 si.... se pare k functioneaza :D


Titlul: Răspuns: 008 Cifra
Scris de: Bivol Mihai din Iunie 07, 2007, 10:50:55
Dupa ce am citit forumu am luat si eu 100, \:D/ \:D/, muream in bezna daca nu ziceati ca se tin minte ultimele 2 cifre


Titlul: Răspuns: 008 Cifra
Scris de: alexandru andronache din Iulie 28, 2007, 08:42:43
Imi spuneti si mie daca sunt bune valorile astea pentru 0--99?

Editat de moderator: Te rog nu posta pe forum rezolvari aproape complete. Daca vrei poti sa imi trimiti un private message si iti raspund.

Imi puteti spune si mie unde gresesc?Sau cel putin dati-mi o valoare pentru care programul nu merge

[editat de moderator]: nu posta cod sursa pe site, este usor sa faci singur debug si sa vezi unde nu iti merge programul la problema asta. sunt multe post-uri la problema asta si gasesti o gramada de sfaturi in ele. de asemenea, te rog sa nu postezi de 2 ori consecutiv :)


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Iulie 29, 2007, 08:52:24
Ti-am trimis inca de ieri un private message cu valorile bune. Ar trebui sa te ajute :).


Titlul: de ce?
Scris de: Rusu Alexandru din Noiembrie 30, 2007, 13:31:49
la problema CIFRA mie imi da rezultat corect pe toate cazurile .
de ce am 0?


Titlul: Răspuns: 008 Cifra
Scris de: Flaviu Pepelea din Noiembrie 30, 2007, 18:28:16
Pt ca ceva nu ai facut bine :D


Titlul: Răspuns: 008 Cifra
Scris de: Bogdan-Alexandru Stoica din Noiembrie 30, 2007, 23:17:12
putin probabil sa fi incercat toate testele... volumul de date e destul de mare. incearca sa faci un algoritm brute-force si sa calculezi pana la 1000. verifica sa afisezi corect. citeste cu atentie acest topic. s-au discutat multe idei de rezolvare :)


Titlul: Răspuns: de ce?
Scris de: Ivan Nicolae din Decembrie 01, 2007, 12:25:59
la problema CIFRA mie imi da rezultat corect pe toate cazurile .
de ce am 0?
eventual daca dai si tu mai multe detalii... despre cum faci, poate putem sa te ajutam


Titlul: Cifra
Scris de: Prigoana Cristian din Decembrie 10, 2007, 23:03:48
Buna, imi poate explica cineva pls , de ce iau 0 puncte? dupa mine am facut corect, si simplu, dar sunt sigur ca m-am inselat:)), pentru numere mai mici, merge corect.... :-k

int t,n,s=1,i,j,nr=1;
   fin>>t;
   for(int k=1;k<=t;++k)
     {
         fin>>n;
         for(i=2;i<=n;++i)
           {
            for(j=i;j>0;j--)
               nr*=i,nr%=10;
           s+=nr%10,s%=10;
           nr=1;
            }
       fout<<s%10<<"\n",s=1;
      }   


Titlul: Răspuns: 008 Cifra
Scris de: Paul-Dan Baltescu din Decembrie 10, 2007, 23:38:13
10^100 nu incape in int.


Titlul: Răspuns: 008 Cifra
Scris de: Tirca Bogdan din Ianuarie 12, 2008, 22:17:43
Offf.Ma manca problema asta.Nu stiu de ce ia atat timp si kb...Am 2 --for-- si un  un switch asta e codu
Cod:
#include<iostream>
#include<stdio.h>
FILE *f,*g;
int main ()
{
f=fopen("cifra.in","r");
g=fopen("cifra.out","w");
int n,s,i; long j,s2,q ;
fscanf(f,"%d\n",&n);
for(i=1;i<=n;i++)
{
 fscanf(f,"%s\n",&q);
 s=0;
 for(j=1;j<=q;j++)
 {switch (j)
 {
 case 1:s=(s+1)%10;break;
 case 2:s=(s+4)%10;break;
 case 3:s=(s+7)%10;break;
 case 4:s=(s+6)%10;break;
 case 5:s=(s+5)%10;break;
 case 6:s=(s+6)%10;break;
 case 7:s=(s+3)%10;break;
 case 8:s=(s+6)%10;break;
 case 9:s=(s+9)%10;;break;
 case 0:s=s;break;
 }
 }
  fprintf(g,"%d\n",s);
}
fclose(f),fclose(g);
return 0;
}




Daca e prea mult stergeti-l dar am luat 0 puncte pe el asa ca.... :?


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Ianuarie 12, 2008, 22:23:32
cam dubioasa sursa..tu citesti q-ul de tip sir de caractere (cu "%s"), si apoi ai for(j=1;j<=q;j++) {} ? :eyebrow:


Titlul: Răspuns: 008 Cifra
Scris de: Tirca Bogdan din Ianuarie 12, 2008, 22:26:06
Pai asa citi mai sus.In fine poate nu intelesei eu.Dar la inceput aveam %ld.Si tot nu mearsa...
Later:aaa si la ultimu "break" aveam ...;;break;modificai si nu asta e problema


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Ianuarie 12, 2008, 22:32:29
Neah...ce pot sa iti spun? Topicul asta are 5 pagini. E plin de indicii. Citeste si incearca sa faci dupa cum iti spun ele. Ai grija ca rezultatele se repeta din 100 in 100 de numere... Deci, nu trebuie decat sa precalculezi un vector de solutii pt fiecare nr de la 1 la 100, iar apoi, in functie de acestea, vei afisa doar v[penultima*10+ultima], unde ultima si penultima sunt ultimile 2 cifre ale lui N. Zic eu ca e suficient sa iti dai seama. Spor!  :ok:


Titlul: Răspuns: 008 Cifra
Scris de: HighScore din Ianuarie 12, 2008, 22:37:51
si ar mai fi si aspecutul....ca tu citesti un string intr-un integer....?
p.s.: degeaba scrii long int, ca pe InfoArena long int e acelasi lucru cu int (int oscileaza intre short int si long int in functie de compiler, mai exact in borland int<=>short int  iar in gnu(compilerul IA) int<=>long int)


Titlul: Răspuns: 008 Cifra
Scris de: Tirca Bogdan din Ianuarie 12, 2008, 22:40:10
hm... ms sper sa reusesc odata :angry: Dar nu ai o idee de ce asta nu merge? de ce ii ia atat de mult timp pentru a afla macar ultima cifra a primului numar?


Titlul: Răspuns: 008 Cifra
Scris de: HighScore din Ianuarie 12, 2008, 22:41:58
...nu prea face nimica algoritmul tau chiar daca ai citii bine(un int in q) pentru ca tu ai switch in j, nu in j%10 :-', si cand j depaseste 10.... nu mai face nimic algoritmul
LE: pe langa multe alte aspecte


Titlul: Răspuns: 008 Cifra
Scris de: Tirca Bogdan din Ianuarie 12, 2008, 23:42:42
Dap cand depaseste 10 nu mai face nimic.Acum realizez si eu.


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Ianuarie 13, 2008, 01:00:14
Neah...ce pot sa iti spun? Topicul asta are 5 pagini. E plin de indicii. Citeste si incearca sa faci dupa cum iti spun ele. Ai grija ca rezultatele se repeta din 100 in 100 de numere... Deci, nu trebuie decat sa precalculezi un vector de solutii pt fiecare nr de la 1 la 100, iar apoi, in functie de acestea, vei afisa doar v[penultima*10+ultima], unde ultima si penultima sunt ultimile 2 cifre ale lui N. Zic eu ca e suficient sa iti dai seama. Spor!  :ok:

Ideal ar fi sa iti dai seama si de ce e asa, nu doar sa iei 100 de puncte :).


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Ianuarie 13, 2008, 11:24:32
Desi a trecut foarte mult timp de cand am rezolvat problema, inca nu mi`am dat "seama de ce e asa". Ideea e ca, daca ridici un numar x, la puterea y, si doresti sa afli doar ultima cifra a acestei ridicari la putere, rezultatele se vor repeta , fiind in functie de ultima cifra a bazei ridicata la puterea restului dintre ultima cifra a exponentului %4.
De exemplu, pt numerele care se termina in 3 (sa le notam cu x), avem asa:
x^0=1 (rezultatele sunt toate %10).
x^1=3
x^2=9
x^3=7
x^4=1
x^5=3
x^6=9
...

Asadar, se observa ca, daca exponentul (sa`l notam cu y) respecta :
* y%4==0, atunci x^y se termina in 1.
* y%4==1, atunci x^y se termina in 3.
* y%4==2 atunci x^y se termina in 9.
* y%4==3, atunci x^y se termina in 7. [unde x, este un numar care se termina in 3].

La fel se intampla si pt celelalte cifre. Acest lucru m-a ajutat sa`mi generez intr-un timp foarte scurt vectorul ala de 100. Banuiesc ca faptul ca se repeta din 100 in 100 are legatura cu asta. Ar putea posta cineva o demonstratie matematica care sa arate ca acele sume [din problema] au rezultate care se repeta din 100 in 100? I-as fi foarte recunoscator.  :ok:


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Ianuarie 13, 2008, 12:34:05
Avem asa:

1. x^x = (x+100)^(x+100) (modulo 10).
2. suma 0^0 + 1^1 + 2^2 + ... + 99^99 = 0 (modulo 10).

Acum iti dai seama?


Titlul: Răspuns: 008 Cifra
Scris de: Nezbeda Harald din Ianuarie 16, 2008, 22:07:50
Am o problema, presupun k e la metoda de generare a sirului. Eu am folosit urmatorul algoritm:
Cod:
for i := 1 to 100 do begin
k := 1;
for j := 1 to i do begin
k := (k mod 10) * (i mod 10);
end;
A[i] := k;
end;
for i := 2 to 100 do begin
A[i] := A[i]+A[i-1];
A[i] := A[i] mod 10;
end;
Editat de moderator: folositi tag-ul "code" cand postati bucati dintr-o sursa


Titlul: Răspuns: 008 Cifra
Scris de: Vlad Fisca din Februarie 17, 2008, 19:28:37
Ce am gresit cand primesc acest mesaj "Non-zero exit status".Am facut testele mele si nergea...Ma poate ajuta cineva?Multumesc!!


Titlul: Răspuns: 008 Cifra
Scris de: Tirca Bogdan din Februarie 22, 2008, 13:21:58
Din cat in cat se repetea totusi?din 100 in 100 la mine nu merge  ](*,)
Cod:
 for(i=1;i<=m;i++)
{
 fscanf(f,"%ld",&n);
 if (n<=100) k=n;
 else k=n%100;
 fprintf(g,"%d\n",a[k]);
}
unde a[] este vectorul cu primele 100 de elemente.Any idea? ](*,)


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Februarie 22, 2008, 15:10:30
Vezi ca numerele au 100 de cifre. Intr`o variabila de tip long nu pot baga mai mult de 9 cifre. Citeste intr`un vector char, ca si cum ai pastra un numar mare. Spor.


Titlul: Răspuns: 008 Cifra
Scris de: Vlad Fisca din Februarie 22, 2008, 18:46:20
Multumesc Florian!


Titlul: Răspuns: 008 Cifra
Scris de: Andrici Cezar din Februarie 24, 2008, 16:04:15
ce am gresit??? poate sa imi zica si mie cineva :readthis:

LE: am inteles ca trebuie ultemele 2 cifre dar dc?

LLE:
Cod:
program p12;
var f,g:text;
    j,n,uc,uc1,i,t,c:longint;
begin
assign(f,'cifra.in');reset(f);
assign(g,'cifra.out');rewrite(g);
readln(f,n);
for i:=1 to n do
  begin
  uc1:=0;
  uc:=0;
  readln(f,t);
  for j:=1 to t do
      begin
      c:=j mod 10;
      case c of
       1,6,5:uc:=c;
       4,9:if j mod 2=1 then uc:=c
            else uc:=c*c;
       2,3,7,8: if j mod 4=1 then uc:=c
                else if j mod 4=2 then uc:=c*c
                else if j mod 4=3 then uc:=c*c*c
                else uc:=c*c*c*c;
       end;
       uc1:=(uc1+uc)mod 10;
       end;
       writeln(g,uc1);
  end;
close(g);
close(f);
end.


dc un vector de o suta

Editat de moderator: nu mai posta de 3 ori consecutiv, nimeni nu o sa-ti raspunda mai repede daca postezi de mai multe ori.


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Februarie 24, 2008, 17:49:10
Sunt peste 5 pagini de forum. Citeste-le!


Titlul: Răspuns: Răspuns: 008 Cifra
Scris de: Andrei Misarca din Februarie 24, 2008, 22:05:35
LE: am inteles ca trebuie ultemele 2 cifre dar dc?
ai nevoie doar de ultimele doar de ultimele 2 cifre pentru a afla restul impartirii la 4(daca am numarul abcdef, restul inmpartirii lui la 4 este restul impartirii lui ef la 4, pt k abcdef=abcd*100(care e divizibil oricum q patru pt k e inmultit cu 100)+ef)


Titlul: Răspuns: 008 Cifra
Scris de: floflofloflofloflo din Februarie 27, 2008, 14:27:03
Mie imi da rezultatul ,insa am luat 0 .Se poate uita cineva pe sursa ?Multumesc anticipat.


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Februarie 27, 2008, 14:39:04
Mai citeste o data enuntu. Nu cred ca ai inteles exact ce se cere. Tu nici macar nu citesti valorile lui N, doar T-ul la inceput.


Titlul: Răspuns: 008 Cifra
Scris de: floflofloflofloflo din Februarie 27, 2008, 15:21:52
M-am prins ,dar tot 0.Chestia e ca imi da rezultatul.


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Misarca din Februarie 28, 2008, 22:24:00
M-am prins ,dar tot 0.Chestia e ca imi da rezultatul.
Ce iti zice evaluatorul? WA,TLE...?


Titlul: Răspuns: 008 Cifra
Scris de: floflofloflofloflo din Februarie 28, 2008, 22:49:52
Test     Timp executie     Memorie folosita     Mesaj    Punctaj/test
1   0ms   12kb   Raspuns gresit!   0
2   4ms   8kb   Raspuns gresit!   0
3   0ms   8kb   Raspuns gresit!   0
4   0ms   8kb   Raspuns gresit!   0
5   0ms   8kb   Raspuns gresit!   0
6   0ms   8kb   Raspuns gresit!   0
7   4ms   360kb   Raspuns gresit!   0
8   8ms   356kb   Raspuns gresit!   0
9   8ms   360kb   Raspuns gresit!   0
10   16ms   356kb   Raspuns gresit!   0
Punctaj total   0

Dau sursa sau ma rog se vede.


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Februarie 29, 2008, 08:11:50
Inseamna ca afisezi reultate gresite. Topicul asta are vreo 6 pagini. Ar trebui sa gasesti indicii.


Titlul: Răspuns: 008 Cifra
Scris de: Mircea Radu-Viorel din Martie 02, 2008, 18:57:56
de ce imi arata la mesaj Non-zero exit status,imi da 0 puncte si cand ii dau eu teste imi da bine?


Titlul: Răspuns: 008 Cifra
Scris de: Pripoae Teodor Anton din Martie 02, 2008, 19:25:53
in pascal din cate stiu eu daca iti da o eroare programul iti returneaza o valoare diferita de 0... poate ai sigsegv sau imparti la 0...


Titlul: Răspuns: 008 Cifra
Scris de: floflofloflofloflo din Martie 02, 2008, 19:45:38
Inseamna ca afisezi reultate gresite. Topicul asta are vreo 6 pagini. Ar trebui sa gasesti indicii.
Iti dau sursa si daca gasesti tu vreo greseala....


Titlul: Răspuns: 008 Cifra
Scris de: Mircea Radu-Viorel din Martie 02, 2008, 19:55:15
in pascal din cate stiu eu daca iti da o eroare programul iti returneaza o valoare diferita de 0... poate ai sigsegv sau imparti la 0...
uite...sursa... n-am impartire la 0...
Cod:
program uc;
 var
    f,g:text;
    n,i,j,k,s,p:longint;
    t:word;
begin
 assign(f,'cifra.in');
 reset(f);
  read(f,n);
          assign(g,'cifra.out');
          rewrite(g);
          for k:=1 to n do
           begin
                readln(f,t);
                s:=0;
            for i:=1 to t do
             begin
                   p:=1;
                    for j:=1 to i do
                     p:=p*i;
                    s:=s+p;
                    s:=s mod 10;
             end;
            writeln(g,s);
           end;
  close(f);
 close(g);
end.
P.S. AM INVERSAT T CU N ...


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Martie 02, 2008, 20:02:21
Inseamna ca afisezi reultate gresite. Topicul asta are vreo 6 pagini. Ar trebui sa gasesti indicii.
Iti dau sursa si daca gasesti tu vreo greseala....

Numerele din fisierul de intrare au pana la 100 de cifre. Nu poti sa citesti pur si simplu intr-un int (variabila x la tine in sursa). Trebuie sa citesti caracterele pe rand.


Titlul: Răspuns: 008 Cifra
Scris de: Glodeanu Ioan Daniel din Martie 03, 2008, 11:07:08
Radupoint, numarul este prea mare... citeste-l ca sir de caractere, alege-le pe ultimele 2 caractere si transforma-le in valoare:P


Titlul: Răspuns: 008 Cifra
Scris de: Vladimir Oltean din Martie 09, 2008, 23:53:31
ma dau batut... :fool: cum fac sa pastrez numerele n intr-un sir de caractere??  :-s


Titlul: Răspuns: 008 Cifra
Scris de: Pripoae Teodor Anton din Martie 10, 2008, 20:32:06
pai cum adica sa le retii ? citesti cu gets si pe tine te intereseaza doar ultimele 2 cifre

si faci asa:

Cod:
scanf("%d",&t);
while (t--){
      gets(s);
      x=strlen(s);
      if (x>=2)
              n=(s[x-2]-'0')*10+s[x-1]-'0';   //pe tine te intereseaza doar ultimele 2 cifre ale lui n
     else
             n=s[0]-'0' //daca n are doar o cifra o pastrezi pe aia
}


Titlul: Răspuns: 008 Cifra
Scris de: Zozo Zozo din Martie 12, 2008, 17:24:38
De ce nu e buna sursa mea??
De ce imi da evaluatorul 0 puncte?Algoritmul implementat...cred eu..e corect :readthis:.De ce imi da totusi evaluatorul 0 puncte???

Salut.Sunt Zozel si tocmai am facut problema Cifra si...primesc o puncte ](*,).As vrea sa stiu si eu de ce acest lucru...iata-mi sursa:


Cod:
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE *fin=fopen("cifra.in","r");
FILE *fout=fopen("cifra.out","w");

int u,add,twostate,T,i,j;
char number[1500],aux;

fscanf(fin,"%d\n",&T);
 for(j=0;j<T;j++){
  for(i=0;i<200;i++) number[i]='z';
   i=0;
 while(!feof(fin)){
  aux=fgetc(fin);
  if(aux>47 && aux<58)
  number[i]=aux;
  else break;
  i++;
 }
   u=atoi(&number[i-2]);
   twostate=u/10*10+2;
   u/=10;u*=7;u%=10;
   add=atoi(&number[i-1]);
   twostate=(twostate%4==0)?6:4;
 switch(add){
  case 1:u++;break;
  case 2:u+=twostate+1;break;
  case 3:u+=twostate+8;break;
  case 4:u+=twostate+4;break;
  case 5:u+=twostate+9;break;
  case 6:u+=twostate+5;break;
  case 7:u+=twostate+8;break;
  case 8:u+=8;break;
  case 9:u+=7;break;
 }
  fprintf(fout,"%d\n",u%10);
}
   fclose(fin);
   fclose(fout);
return 0;
}

Editat de admin:
1. Nu mai posta de doua ori consecutiv.
2. Foloseste tagul code atunci cand postezi surse
3. Evaluatorul are dreptate


Titlul: Răspuns: 008 Cifra
Scris de: Zozo Zozo din Martie 12, 2008, 19:56:42
Cum adik evaluatorul are dreptate?...as vrea si eu sa stiu totusi la ce am gresit...cu ce e gresit algoritmul meu..


Titlul: Răspuns: 008 Cifra
Scris de: Pripoae Teodor Anton din Martie 12, 2008, 20:07:28
da evalu are dreptate  :P sunt o gramada de oameni cu 100...  si nuj... algoritmul tau pare lung... daca tot sursele sunt vizibile cred ca pot sa iti dau un link catre sursa mea care pare mult mai scurta :P

http://infoarena.ro/job_detail/63243?action=view-source
 (http://infoarena.ro/job_detail/63243?action=view-source)

+ ca nuj de ce te complici cu atatea case-uri si faci while (!feof(fin)) si vezi ca feof din cate stiu iti baga ultimu caracter de 2 ori...

incearca cu fgets(s)


Titlul: Răspuns: 008 Cifra
Scris de: Alexandru Miron din Martie 20, 2008, 13:46:49
Este in clasa 5 nu stie sa declare astfel de vectori cred ca a copiat


Titlul: Răspuns: 008 Cifra
Scris de: Pacala din Martie 31, 2008, 20:15:38
Ce am gresit cand primesc acest mesaj "Non-zero exit status".Am facut testele mele si nergea...Ma poate ajuta cineva?Multumesc!! (ma dispera jur)

LE : M-am prins.


Titlul: Răspuns: 008 Cifra
Scris de: Savin Tiberiu din Martie 31, 2008, 23:17:59
Nu stiu exact de ce apare aceasta eroare, insa sunt curios daca a numarat cineva de cate ori s-a intrebat chestia asta pe forum?? cu siguranta ca daca ai fi citit topicul intitulat subtil "mesaje de eroare" ai fi gasit acolo destule motive.


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Aprilie 01, 2008, 17:07:07
Nu stiu exact de ce apare aceasta eroare, insa sunt curios daca a numarat cineva de cate ori s-a intrebat chestia asta pe forum?? cu siguranta ca daca ai fi citit topicul intitulat subtil "mesaje de eroare" ai fi gasit acolo destule motive.

apropo de chestia asta.. chiar daca e off topic: Ar trebui ca pe prima pagina sa fie un link "mare si lat" catre Documentatie! In ultima perioada aproape numai despre erori s-a vorbit.

ps: prin "mare si lat" inteleg "cat mai vizibil".  :)


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Aprilie 01, 2008, 18:43:43
La problema asta chiar sunt zeci de indicii pe forum... si tot aceleasi lucruri se intreaba  :fool:...
@Florian: Ai dreptate...MARE SI LAT :D... sau cand intri pe forum sa fii redirectat spre Documentatie =))=))...acum serios... linkul cred ca ar trebui sa fie mult mai evident...


Titlul: Răspuns: 008 Cifra
Scris de: Pacala din Aprilie 02, 2008, 18:28:00
bai oamenilor prin o simpla intrebare .... (am citit topicu inainte crde-ma de doua ori) dar in cazul meu chiar nu semana cu ce spuneaty voi pe topic ma rog )... nu tragety concluzii


Titlul: Răspuns: 008 Cifra
Scris de: Savin Tiberiu din Aprilie 02, 2008, 18:47:15
ai citit topicu "mesaje de eroare" si nu ai gasit raspunsul la intrebarea ta???


Titlul: Răspuns: 008 Cifra
Scris de: Ciocan Andrei din Aprilie 03, 2008, 16:54:09
imi poate da cineva un test ca sa ma conving singur????
sau dak vrea cineva sa citeasca sursa mea.............(mai bine nu)



Titlul: Răspuns: 008 Cifra
Scris de: Bogdan-Alexandru Stoica din Aprilie 04, 2008, 10:10:30
pentru N=1234567890, raspunsul este 3. dar tie iti afiseaza 63.
aici
Cod:
d=((a/10)*7);
, d s-ar putea sa-ti depaseasca valoarea 9 si se poate intampla sa nu-ti intre in for (cand ultima cifra a lui N este 0). pune %10 si o sa iei 100.


Titlul: Răspuns: 008 Cifra
Scris de: Mihai Gradinescu din Aprilie 13, 2008, 23:28:54
da totusi nu inteleg la ce imi mai trebuie si penultima cifra am tot vazut aici pe forum...
mie imi trebuie doar ultima cifra la ce mai trebuie sa retin si penultima cifra  :-k :eyebrow: ???


Titlul: Răspuns: 008 Cifra
Scris de: Mihai Gradinescu din Aprilie 13, 2008, 23:35:32
aaa  ](*,) gata m-am prins  :P scuze  :thumbup:


Titlul: Răspuns: 008 Cifra
Scris de: Patru Ovidiu din Aprilie 14, 2008, 10:45:50
Imi poate spune cineva cum sa citesc un numar atat de mare? (adica pana la 10^100), ca io sunt abea la inceput si nu stiu  :sad:


Titlul: Răspuns: 008 Cifra
Scris de: Bondane Cosmin din Aprilie 14, 2008, 10:58:43
Imi poate spune cineva cum sa citesc un numar atat de mare? (adica pana la 10^100), ca io sunt abea la inceput si nu stiu  :sad:

Nu exista un tip de date care sa retina un numar asa mare, deci singura solutie este sa citesti caracter cu caracter numarul sau sub forma de string.


Titlul: Răspuns: 008 Cifra
Scris de: Patru Ovidiu din Aprilie 14, 2008, 12:05:12
Nu exista un tip de date care sa retina un numar asa mare, deci singura solutie este sa citesti caracter cu caracter numarul sau sub forma de string.
    Adica mai precis cam cum se foloseste string? Ca din ce scrie la helpul de la C++ nu inteleg nimic.


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Aprilie 14, 2008, 14:44:49
Uita-te si tu pe sursele altora, nu degeaba sunt vizibile: http://infoarena.ro/monitor?task=cifra&score_begin=100


Titlul: Răspuns: 008 Cifra
Scris de: Bogdan-Alexandru Stoica din Aprilie 14, 2008, 14:45:59
cifrele le vei retine in vectorul s astfel:

Cod:
 char s[101];
[...]
freopen("cifra.in", "r", stdin);
gets(s);


Titlul: Răspuns: 008 Cifra
Scris de: Rosca Valentin din Aprilie 18, 2008, 20:04:22
Editat de moderator: Topicurile acestea sunt pentru a discuta probleme, nu pentru a pune smiley-uri! Pentru smiley-uri ai messenger-ul.


Titlul: Răspuns: 008 Cifra
Scris de: MciprianM din August 23, 2008, 09:05:42
Am citit tot topicul asta si in afara de 2-3 toti folosesc siruri de 100;
ultima cifra se repeta din 20 in 20 pt nn
Scrie lucrul asta si pe forum.
Citat
4. (((n % 10) * 10) + 2) % 4 -> 0 sau 2
  zice flo_demon
Citat
Si poti sa consideri n mod 20 = (n mod 100) mod 20.
  -gogu
Si aici e implementarea mea cu sir de 20:
http://infoarena.ro/job_detail/204353


Titlul: Răspuns: 008 Cifra
Scris de: Amza Bianca Ioana din Februarie 16, 2009, 21:53:44
Am si eu o intrebare...adevarul este ca sunt cam noua pe aici si as dori sa-mi spuneti si mie, daca se poate, de ce imi apare "Non-exist status!" ](*,)...Care ar putea fi cauzele? Multumesc anticipat :?


Titlul: Răspuns: 008 Cifra
Scris de: gaboru corupt din Februarie 16, 2009, 21:57:33
poti intra pe http://infoarena.ro/documentatie/evaluator sa citesti mesaje de evaluare  :ok:


Titlul: Răspuns: 008 Cifra
Scris de: Amza Bianca Ioana din Februarie 16, 2009, 22:00:47
poti intra pe http://infoarena.ro/documentatie/evaluator sa citesti mesaje de evaluare  :ok:
...multumesc mult :)


Titlul: Răspuns: 008 Cifra
Scris de: Amza Bianca Ioana din Februarie 16, 2009, 22:43:55
Ma poate ajuta cineva sa-mi dau seama unde gresesc...va rooog mult ](*,)
Cod:

Cod:
var
f,g: text;
a: array[0..99] of integer;
i,s,uc,j,x: longint;
t,n:  integer;
begin
assign(f,'cifra.in');
reset(f);
assign(g,'cifra.out');
rewrite(g);
for i:=0 to 99 do
a[i]:=0;
for i:=0 to 99 do
   begin
     uc:=i*i;
     uc:=uc*i;
     uc:=uc*i;
     uc:=uc mod 10;
     if i mod 4=0 then a[i]:=uc
                  else if i mod 4=1 then a[i]:=(uc*(i mod 10)) mod 10
                                    else if i mod 4=2 then
                                             a[i]:=uc*((i*i) mod 10) mod 10
                                          else begin x:=(i*i*i) mod 10;
                                             a[i]:=(uc*x)  mod 10; end;
                  end;
s:=0;
for i:= 0 to 99 do begin
    a[i]:=(s+a[i]) mod 10;
    s:=a[i];
   end;
   readln(f,t);
for j:=1 to t do begin
   readln(f,n);
   if n>=100 then writeln(g,a[n mod 100])
             else writeln(g,a[n]);
   end;
close(f);
close(g);
end.

[edit] e mai elegant sa folosesti tag-ul "[ code ]" (fara spatii) cand postezi cod


Titlul: Răspuns: 008 Cifra
Scris de: Dinu Vladimir din Februarie 18, 2009, 23:32:34
care este problema acestui program.   ](*,)
in c++merge bine dar compilatorul vostru imi arata erori . :readthis:


Titlul: Răspuns: 008 Cifra
Scris de: gaboru corupt din Februarie 18, 2009, 23:37:35
functia main trebuie sa returneze o valoare, deci pune int main() si la final pune un return 0. si in loc de endl; pune "\n".


Titlul: Răspuns: 008 Cifra
Scris de: Murica Edward Cristian din Februarie 20, 2009, 23:50:26
yo nu inteleg dc imi da 0 p ca merge pt orice nr ca am incercat
nu imi intra in timp la 3 dar la restul ar trebui sa mearga
dac stiti dc nu merge datimi si mie un mass
Cod:
#include<fstream>   
using namespace std;   
int main()   
{   
    ifstream in("cifra.in");   
    ofstream out("cifra.out");   
    long t,n,i,l,k;
int c[20]={0,1,5,2,8,3,9,2,8,7,7,8,4,7,3,8,4,1,5,4};   
    in>>t;
for (i=1;i<=t;i++)   
    {in>>n;   
    l=n/20;   
    k=n%20;
k=c[k];
    l=l*4+k;   
    out<<l%10<<endl;}   
    in.close();   
    out.close();   
    return 0;   
}

[editat] foloseste tag-ul "code" atunci cand postezi cod


Titlul: Răspuns: 008 Cifra
Scris de: Emanuel Cinca din Februarie 22, 2009, 19:53:18
nu iti merge fiindca e gresit... se repeta din 100 in 100 ultima cifra... citeste threadul  :)


Titlul: Răspuns: 008 Cifra
Scris de: Iacob Vlad din Martie 15, 2009, 16:39:30
de ce imi da eroare Non-zero exit status. aveti idee ? Care ar putea fi cauza ? pliz help


Titlul: Răspuns: 008 Cifra
Scris de: Dragos Oprica din Martie 15, 2009, 17:46:52
de ce imi da eroare Non-zero exit status. aveti idee ? Care ar putea fi cauza ? pliz help
sigur returnezi valoarea 0 la final? :)


Titlul: Răspuns: 008 Cifra
Scris de: Iacob Vlad din Martie 15, 2009, 17:55:00
e facuta in pascal ;)

http://infoarena.ro/job_detail/281702?action=view-source asta e sursa

[editat de moderator] evita sa postezi consecutiv, ci modifica-ti mesajele


Titlul: Răspuns: 008 Cifra
Scris de: Pripoae Teodor Anton din Martie 15, 2009, 20:09:44
Numerele citite pot avea pana la 100 de cifre :). Tu nu poti citi un numar de 100 de cifre intr-un intreg. Incearca sa-l citesti ca sir de caractere.


Titlul: Răspuns: 008 Cifra
Scris de: Popescu George din Martie 25, 2009, 11:01:10
Pai de ce este gresit nici nu pricep mai faceti odata testele ](*,) ](*,) ](*,) :fighting:


Titlul: Răspuns: 008 Cifra
Scris de: Usurelu Catalin din Aprilie 20, 2009, 18:28:43
Totusi cum se demonsteaza matematic ca se repeta dn 100 in 100 si cu ce ajuta impartirea cu 4 ?


Titlul: Răspuns: 008 Cifra
Scris de: Porcescu Alexandru din Iunie 28, 2009, 12:54:52
 ](*,)  cine imi spune si mie ce am gresit Please! :sad:
Cod:
#include<iostream.h>
#include<fstream.h>
#include<math.h>
int main()
{
ifstream c("cifra.in");
ofstream v("cifra.out");
int t,i,n,u,s=0;
c>>t;
for(i=1;i<=t;i++)
{
c>>n;
s=s+pow(n,n);
u=s%10;
v<<u;
v<<endl;
}
c.close();
v.close();
return 0;

[Editat de moderator]E chiar asa greu sa folosesti tagul code cand postezi cod sursa? E a treia oara cand iti modific un mesaj


Titlul: Răspuns: 008 Cifra
Scris de: A Cosmina - vechi din Iunie 28, 2009, 12:58:42
Nu mai posta surse imediat ce nu-ti merg.Incearca sa optimizezi algoritmul,sa mai schimbi cate ceva etc.
O chestie care se vede n avion este ca ai uitat sa inchizi dupa return 0;


Titlul: Răspuns: 008 Cifra
Scris de: Porcescu Alexandru din Iunie 28, 2009, 13:10:36
http://infoarena.ro/job_detail/327323?action=view-source


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Iunie 28, 2009, 14:51:09
În primul rând, nu aşa se rezolvă problema. Am văzut din posturile tale de pe forum că nu cunoşti lucruri elementare de limbaj. Îţi recomand să mai înveţi puţin C/C++, după care să revii pe infoarena gata să ataci arhiva ;). La tine în sursa n este de tip int (poate lua valori până la 2 miliarde), pe când în fişierele de intrare n-ul poate avea până la 100 de cifre.

În al doilea rând, problema este open source - poţi vedea toate soluţiile celorlalţi, inclusiv cele care au obţinut punctaj maxim.

În al treilea rând, citeşte acest topic. Cu siguranţă vei găsi răspunsuri la toate nedumeririle pe care le ai.

Munceşte mai mult pe cont propriu, nu mai aştepta să îţi dea lumea mură-n gură. :weightlift:


Titlul: Răspuns: 008 Cifra
Scris de: Porcescu Alexandru din Iunie 28, 2009, 15:11:59
Multumesc pentru sfat am sa-l iau in considerare.........
Succes in continuare pentru toti!


Titlul: Răspuns: 008 Cifra
Scris de: A Cosmina - vechi din Iulie 20, 2009, 12:50:24
Cat va da pentru 567824517983 ? In asteptarea evaluatorului am creat singura niste teste, sa ma verific. La asta am o oarecare nelamurire.  :-k


Titlul: Răspuns: 008 Cifra
Scris de: A Andrei din Iulie 20, 2009, 12:55:59
Cat va da pentru 567824517983 ? In asteptarea evaluatorului am creat singura niste teste, sa ma verific. La asta am o oarecare nelamurire.  :-k
8  :ok:


Titlul: Răspuns: 008 Cifra
Scris de: A Cosmina - vechi din Iulie 20, 2009, 13:04:58
E bine,mersi.  :peacefingers:

Acum astept sa-si revina evaluatorul.

Edit: Si-a revenit  :banana: ! Da, sursa este buna, 100 de puncte.


Titlul: Răspuns: 008 Cifra
Scris de: creeps din August 12, 2009, 01:07:44
Am si eu o problema. Am facut urmatoarea sursa, am incercat cu valorile din Exemplu, si a mers. Cand o trimit, insa, primesc 0 puncte.

Cod:
#include<fstream>
using namespace std;

int putere(int cifra) {
int numar = 1;
for(int i = 0; i < cifra; i++) {
numar *= cifra;
}

return numar;
}

int main() {

ofstream fout("cifra.out");
ifstream fin("cifra.in");

int cifra, d, t;
int z = 0;
fin >> t;
for(d = 0; d < t; d++) {
fin >> cifra;
z += putere(cifra);
fout << z%10 << endl;
}


return 0;
}

Edit: Cu ce numere testeaza evaluatorul? Stiam ca int-ul nu poate trece de 2 milioane. Toate testele trec de 2 milioane, sau mai exista o problema la sursa? Ar ajuta sa-l fac unsigned long int, sau nu pot decat cu un vector? Scuzati-mi lipsa de cunostinte, insa acestea se rezuma la primele 3 capitole din "Thinking in C++". La scoala nu am facut informatica anul asta, iar intr-a cincea/a sasea abia ne preda despre main(), int main(), sau void main(), ce scriam fiind la alegerea noastra...


Titlul: Răspuns: 008 Cifra
Scris de: Lazari Mihai din August 12, 2009, 08:10:52
Citat
Toate testele trec de 2 milioane, sau mai exista o problema la sursa?
Cred ca este cel putin un test sub 2 milioane, nu stiu sigur...
Cat despre sursa, cred ca ar trebui de modificat asa:
Cod:
  int cifra,d,t,z,i;
  fin>>t;
  for(d= 0;d<t;d++) {
    fin>>cifra;
    z=0;
    for(i=1;i<=cifra;i++) z+=putere(i);
    fout<<z%10<<endl;
  }

Si mai bine daca scrii liniile astea asa:
Cod:
    [...]
    for(i=1;i<=cifra;i++) {
      z+=putere(i);
      z%=10;
    }
    fout<<z<<endl;
    [...]

Citat
Ar ajuta sa-l fac unsigned long int, sau nu pot decat cu un vector?
Nu poti lua suta de puncte citind tot numarul intr-o variabila, fie chiar si unsigned long int (numerele din fisier pot avea maxim 101 cifre). Sunt necesare doar ultimele 2 cifre din numar (s-a mai scris asta).

Nu am verificat codul de mai sus, dar cred ca merge  :)


Titlul: Răspuns: 008 Cifra
Scris de: creeps din August 12, 2009, 08:19:46
Eu nu văd nimic modificat în prima sursă De fapt, văd modificat scope-ul, dar cum al meu e global față de FOR, nu cred că e relevant, iar în a doua, dacă scriu așa cum scrii tu, nu ar trebui să scrie în fișier Z-ul final, deci, în cazul Exemplului, 3143?

Am văzut ce s-a scris, însă nu înțeleg de ce trebuie luate ultimele două cifre, și care e treaba cu cifrele acelea din array. Ultimele două cifre, cică dau ca rest la împărțirea cu patru ultima cifră. De ce trebuie să împărțim prin patru pentru a o afla?

Ideea e că mie îmi merge cu Exemplul, și alte trei teste mici făcute de mine. L-am pus să îmi arate ce face la fiecare pas din FOR, și e corect, atât timp cât numărul poate fi depozitat într-un INT.


Titlul: Răspuns: 008 Cifra
Scris de: Lazari Mihai din August 12, 2009, 08:44:08
Pentru fiecare test (d=0,1,2,...,t-1) trebuie sa initializezi variabila z cu 0:
Cod:
z=0
apoi sa calculezi in z suma 11+22+...+cifracifra:
Cod:
for(i=1;i<=cifra;i++) z+=putere(i);
si afisezi ultima cifra a rezultatului:
Cod:
fout<<z%10<<endl;
Citat
iar în a doua, dacă scriu așa cum scrii tu, nu ar trebui să scrie în fișier Z-ul final, deci, în cazul Exemplului, 3143?
Nu, pentru ca la fiecare pas in acest for z va retine doar ultima cifra a rezultatului:
Cod:
    for(i=1;i<=cifra;i++) {
      z+=putere(i);
      z%=10;
    }

Ceea ce afisezi tu in fisier este de fapt:
(aa)%10
(aa+bb)%10
(aa+bb+cc)%10
...

Unde a,b,c,... sunt cele t numere din fisier.


Titlul: Răspuns: 008 Cifra
Scris de: creeps din August 12, 2009, 09:00:33
Păi nu asta trebuie făcut? Uite, aici (http://infoarena.ro/problema/cifra) e problema. Și eu asta fac. Ultima cifră a sumei loop flag-ului curent + cele precedente.

Ideea e că unul din noi nu a înțeles ceva.

Cu sursa postată, asta obțin eu dacă îl testez local, pe baza Exemplului, și e corect, pentru că asta e dat și pe pagina problemei. Dacă îmi mai poate da cineva test cases-uri să verific, aș fi recunoscător...
Cod:
1
5
2
8
3


Titlul: Răspuns: 008 Cifra
Scris de: Lazari Mihai din August 12, 2009, 09:10:32
Citat
Păi nu asta trebuie făcut?
Nu, tu nu ai inteles problema. Faptul ca pentru exemplu iti da corect este pentru ca ele sunt date in aceasta ordine: 1,2,...,t
Ceea ce trebuie sa afisezi este:
(11+22+...+aa)%10
(11+22+...+bb)%10
(11+22+...+cc)%10
...
a,b,c... sunt cele t numere din fisierul de intrare.


Titlul: Răspuns: 008 Cifra
Scris de: creeps din August 12, 2009, 09:13:27
Ah, OK! Acum înțeleg. Mulțumesc mult, voi încerca să îl rescriu.

Am încercat să îl rescriu, dar tot 0 puncte iau. Am testat doar cu numerele impare din Exemplu, deci nu mai poate fi vorba de aceeași eroare, dă calumea la mine, dar la evaluator nu. Asta e sursa modificată.
Cod:
#include<fstream>
using namespace std;

int putere(int cifra) {
int numar = 1;
for(int i = 0; i < cifra; i++) {
numar *= cifra;
}

return numar;
}

int main() {

ofstream fout("cifra.out");
ifstream fin("cifra.in");

int cifra, d, t;
fin >> t;
for(d = 0; d < t; d++) {
int z = 0;
fin >> cifra;
for(int i = 1; i <= cifra; i++) {
z += putere(i);
z %= 10;
                 }
fout << z << endl;
}


return 0;
}


Titlul: Răspuns: 008 Cifra
Scris de: Lazari Mihai din August 12, 2009, 12:47:36
Se pare ca sunt prea mari numerele  :)
Incearca ideea cu ultimele 2 cifre  :peacefingers:

Citat
Pentru aceasta problema accesul la toate sursele trimise este liber!
Daca nu stii cum s-o faci poti sa te uiti la sursele celorlalti de 100 puncte:
http://infoarena.ro/monitor?task=cifra&score_begin=100 (http://infoarena.ro/monitor?task=cifra&score_begin=100)

Ultima sursa a mea are si comentarii, poti sa te uiti, poate te ajuta  :peacefingers:


Titlul: Răspuns: 008 Cifra
Scris de: creeps din August 12, 2009, 13:23:30
Ideea e că nu pot învăța din sursele altora, pentru că, oricât m-aș uita la un exemplu, nu mă pot concentra, și mă gândesc la ce topping pun pe pizza :) Prefer ceva gen pseudo-cod, să simt că fac și eu ceva.

Mulțumesc de ajutor, voi căuta să îmi extind cunoștințele pe cât posibil înainte de a încerca probleme cu un nivel ridicat de dificultate.


Titlul: AM o problema .. am trimis programul si ...
Scris de: Alex Velea din Noiembrie 18, 2009, 21:26:36
Killed by signal 8(SIGFPE) asta ce inseamna ????  :readthis:

in fine eu cred ca algoritmul e bun

am ajuns la concluzia ca se repeta din 200 in 200 suma ... :)
pana la 20 suma e 1 deci .. pana al 200 suma e 0 desi uni folosesc 100  va rog vrumos imi spuneti si mie
daca se poate un buzz :) pe privat ca sa imi atraga atentia  :'(

http://infoarena.ro/job_detail/365484?action=view-source

Editat de admin: Nu mai posta surse complete. La problemele pentru care accesul la surse e liber, pune link.


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Misarca din Noiembrie 18, 2009, 21:42:06
În primul rând când postezi o sursă folosește tagul "code". În al doilea rând, nu am înțeles cum și ce faci tu acolo, dar Killed by signal 8 primești pentru că faci o împărțire sau un modulo la 0.


Titlul: Răspuns: 008 Cifra
Scris de: Dogaru Beniamin din Noiembrie 25, 2009, 22:39:11
Mie imi da eroarea "Non-zero exit status". Ce inseamna?


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Noiembrie 26, 2009, 17:28:23
Da un search pe forum / site. Sunt zeci de oameni care au intrebat asta inaintea ta si carora li s-a raspuns.  :ok:


Titlul: Răspuns: 008 Cifra
Scris de: Bucur Ionut din Decembrie 26, 2009, 20:27:16
eu facui testul ala care il dati pe site da exact... si evaluarea imi da 0  =D&gt; si nu mai contraziceti ca sigur aveti probleme in sistem! E imposibil ca sa aiba ceva


Titlul: Răspuns: 008 Cifra
Scris de: Sima Cotizo din Decembrie 26, 2009, 20:43:52
E imposibil ca sa aiba ceva
Daca te refereai la sistem, iti dau dreptate. E imposibil ca sistemul de evaluare sa aiba ceva. Si nu te contrazic, si programul tau merge. Dar nu cum trebuie.

Ca sa te putem ajuta, spune ce faci in rezolvarea ta.


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Decembrie 27, 2009, 23:35:28
eu facui testul ala care il dati pe site da exact... si evaluarea imi da 0  =D&gt; si nu mai contraziceti ca sigur aveti probleme in sistem! E imposibil ca sa aiba ceva

Cat de mari pot fi numerele din fisierul de intrare? Tipul de date int poate retine numere din ce interval? Incearca sa iti dai un test maxim.

Apropo, de obicei ne face placere sa ii ajutam pe cei care au nelamuriri, dar s-ar putea sa ii deranjeze pe unii dintre useri (printre care ma numar si eu) atitudinea de atotstiutor a unui utilizator cu 2 probleme rezolvate  ;)


Titlul: Răspuns: 008 Cifra
Scris de: Lodoaba Sorin din Ianuarie 29, 2010, 17:46:40
ce inseamna non 0 exit status ??? ](*,) ](*,) :angry:

poste sa imi spuna cnva de ce mu mere??
Cod:
program cifra;
var i,s,k,x,j:longint;
    f,t:text;

function prod(x:longint) :longint;
var i,s:longint;
begin
  x:=x mod 10;
  s:=1;
  for i:=1 to x do
    begin
      s:=s*x;
      s:=s mod 10;
    end;
  prod:=s;
end;

begin
  assign(f,'cifra.in');
  reset(f);
  assign(t,'cifra.out');
  rewrite(t);
  read(f,k);
  {------------------}
  for i:=1 to k do
    begin
      s:=0;
      read(f,x);
      for j:=1 to x do
        begin
          s:=s+prod(j);
          if s>10 then
            s:=s mod 10;
        end;
      writeln(t,s);
    end;
  {------------------}
  close(f);
  close(t);
end.

 Editat de admin: Nu posta consecutiv pe aceeasi tema. Modifica mesajele anterioare!
Foloseste tag-ul [ code ] [ /code ] cand postezi cod. Exista un buton ajutator pentru asta langa emoticoane, pe care se pare ca le-ai gasit.


Titlul: Răspuns: 008 Cifra
Scris de: Paul-Dan Baltescu din Ianuarie 29, 2010, 18:35:59
Pentru Non-zero exit status citeste documentatia despre evaluator (http://infoarena.ro/documentatie/evaluator).

Pentru a afla de ce nu merge programul tau, citeste atent ce s-a mai discutat in acest topic pana acum.


Titlul: Răspuns: 008 Cifra
Scris de: Simoiu Robert din Ianuarie 29, 2010, 18:49:04
1. Programul tau nu este eficient
2. Vezi ca n e 10100, deci trebuie citit ca si char.
3. Trebuie sa "vezi" ca cifrele se repeta dupa un anumit numar  :thumbup:


Titlul: Răspuns: 008 Cifra
Scris de: Vlad Tarniceru din Februarie 21, 2010, 20:55:46
sigur nu sunt gresite testele?adica iau 0 puncte si imi da bine pentru exemplu.uite ideea mea:
ca sa calculam ultima cifra trebuie sa calculam doar suma ultimelor cifre.doar ca si asta ar fi cam mult.asa ca,intr-un vector separat retii sumele astfel:
poz 1:ucif(1^1)
poz 2:ucif(1^1)+ucif(2^2)
poz 3:ucif(1^1)+ucif(2^2)+ucif(3^3)
...
si de fiecare data eu afisezi v[ucif a lui n](deoarece ucif(1^1+2^2+...+9^9)=0,deci ne va interesa doar ultima cifra(adica restul impartirii la 10),pentru ca celelalte vor avea suma 0)

si algoritmul asta ia 0 puncte(  :-k )
uite ce am facut eu:
Cod:
#include<fstream.h>
 #include<string.h>
  ifstream f("cifra.in");
   ofstream g("cifra.out");
    int main(){
        char a[101];
        int v[10],n,i,l;
        v[0]=0;
        v[1]=1;
        v[2]=5;
        v[3]=2;
        v[4]=8;
        v[5]=3;
        v[6]=9;
        v[7]=2;
        v[8]=8;
        v[9]=7;
        f>>n;
        for(i=1;i<=n;i++){
            f>>a;
            l=strlen(a);
            g<<v[a[l-1]-'0']<<"\n";
        }
        g.close();
        return 0;
    }
daca va dati seama care e problema va rog sa-mi spuneti :D


Titlul: Răspuns: 008 Cifra
Scris de: Sima Cotizo din Februarie 22, 2010, 00:07:59
E a nu-stiu-cata oara cand se subliniaza chestia asta pe forum: N poate avea 100 de cifre!
Una din problemele tale e aici:
Cod:
        f>>n;
Incearca sa citesti totusi paginile acestui topic si sigur vei gasi sfaturi care te vor ajuta sa rezolvi problema. Si nu, testele NU sunt gresite.


Titlul: Răspuns: 008 Cifra
Scris de: Simoiu Robert din Februarie 22, 2010, 12:24:11
Exact, si eu am zis acelasi lucru. Daca nu va uitati pe forum macar pe cerinta problemei #-o


Titlul: Răspuns: 008 Cifra
Scris de: Mihai Calancea din Februarie 22, 2010, 15:55:10
La el n e numarul de teste. Numarul il stocheaza in a.


Titlul: Răspuns: 008 Cifra
Scris de: Simoiu Robert din Februarie 22, 2010, 17:43:21
Da , am vazut scuze, dar totusi iti merge pentru testul care e dat ?


Titlul: Răspuns: 008 Cifra
Scris de: alexandru din Februarie 22, 2010, 18:08:03
si de fiecare data eu afisezi v[ucif a lui n](deoarece ucif(1^1+2^2+...+9^9)=0,deci ne va interesa doar ultima cifra(adica restul impartirii la 10),pentru ca celelalte vor avea suma 0)
Nu este corect ce spui. Daca nu ma insel tu te bazezi pe : u(x^y)=u(x)^u(y) ce este gresit. Dar exista o formul pentru suma asta. Genereaza sa zic primele 500 de sume si o sa vezi ceva foarte interesant :)


Titlul: Răspuns: 008 Cifra
Scris de: Vlad Tarniceru din Februarie 22, 2010, 19:35:07
gata stiu care e problema
eu am zis ca ucif(1^1+2^2+...+9^9)=0,dar este 7  :aha:
dar totusi trebuie un algoritm de suma pentur numere mari

multumesc oricum sunteti cei mai tari  :D


Titlul: Răspuns: 008 Cifra
Scris de: Sima Cotizo din Februarie 22, 2010, 20:08:32
Trebuie sa imi cer scuze pentru tonul folosit mai sus. Totusi, vina nu este in totalitate a mea, in pregatirea voastra pentru olimpiada ar trebui sa consultati si niste sfaturi legate de identare (http://www.chris-lott.org/resources/cstyle/LinuxKernelCodingStyle.txt)!


Titlul: Răspuns: 008 Cifra
Scris de: Cancel Radu Constantin din Martie 04, 2010, 21:07:24
nu am citit tot topicul, din motive de timp, dar eu am gandit problema asa
se stie ca orice numar la o putere k, ultima cifra se repeta din 4k in 4k
asa ca am facut o matrice care retine puterile tuturor cifrelor
spre ex: u[3][3]=7; (3^3=27)
apoi , cu un for, de la 1 la n(unde n=nr a carui ultima cifra trebuie sa aflam), adun s=s%10+u[i%10][i%4]
dar cand n>=13, ultima cifra nu imi mai da corect.....si nu stiu de ce...
ma poate ajuta cineva?


Titlul: Răspuns: 008 Cifra
Scris de: Florian Marcu din Martie 04, 2010, 22:15:09
nu am citit tot topicul, din motive de timp
Nu iti va raspunde nimeni din aceleasi motive.   :ok:


Titlul: Răspuns: 008 Cifra
Scris de: Cancel Radu Constantin din Martie 05, 2010, 11:24:51
nu mai conteaza, am gasit greseala, si am generat sirul de 100 nr corect


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Geogescu din Martie 22, 2010, 21:10:05
Cod:
#include<iostream.h>
#include<fstream.h>
int main()
{long i,b,j,z,k=0,c,a;
ifstream f("cifra.in");
ofstream g("cifra.out");
f>>a;
for(i=1;i<=a;i++)
{f>>b;k=0;
for(j=1;j<=b;j++)
{c=1;
for(z=1;z<=j;z++)
c=c*j;
k=k+c;}
g<<k%10<<endl;}
return 0;}

nu intaleg dc da 0 puncte
verificatorul sfideaza normalitatea si logica...pe toate testele afiseaza 0 pcte
poti

[Editat de admin] Foloseste tag-ul [ code ] [ /code ] cand postezi surse.


Titlul: Răspuns: 008 Cifra
Scris de: Mihai Calancea din Martie 22, 2010, 21:14:49
#include<iostream.h>
#include<fstream.h>
int main()
{long i,b,j,z,k=0,c,a;
ifstream f("cifra.in");
ofstream g("cifra.out");
f>>a;
for(i=1;i<=a;i++)
{f>>b;k=0;
for(j=1;j<=b;j++)
   {c=1;
   for(z=1;z<=j;z++)
      c=c*j;
k=k+c;}
g<<k%10<<endl;}
return 0;}

nu intaleg dc da 0 puncte
verificatorul sfideaza normalitatea si logica...pe toate testele afiseaza 0 pcte
poti

n <= 10 ^ 100.


Titlul: Răspuns: 008 Cifra
Scris de: Alexandru-Iancu Caragicu din Aprilie 14, 2010, 16:10:28
Eu ma gandisem la problema asta sa iau string-uri stl la citire, ca sa nu mai parcurg din nou tot sirul pana la sfarsit pentru a-i gasi lungimea. Dar gets() e mult mai rapid decat getline. Sunt ciudate diferentele astea......


Titlul: Răspuns: 008 Cifra
Scris de: Vlad Eugen Dornescu din Aprilie 17, 2010, 13:36:35
Puteti si mie sa imi explicati periodicitatea asta va rog ?  :D


Titlul: Răspuns: 008 Cifra
Scris de: alexandru din Aprilie 17, 2010, 14:56:52
Puteti si mie sa imi explicati periodicitatea asta va rog ?  :D
Genereaza primele 500 de sume si aranjeazale pe 5 linii a cate 100 de elemente ;)


Titlul: Răspuns: 008 Cifra
Scris de: Super Smecher din Mai 08, 2010, 23:33:41
Eu cred ca solutia mea este buna iar a voastra nu este!

Nu e normal, imi da ok pana la 50.000 si iau tot 0 puncte.

Ce am gresit ?

Cod:
#include <iostream>
#include <fstream>
using namespace std;

#include<stdio.h>


int calcul(int n)
{
  int ult = n%10;
 
  int ret = 0;
  switch(ult)
  {
    case 0:
      ret = 0;
      break;
    case 1:
      ret = 1;
      break;
    case 2:
      switch (n%4)
      {
        case 1:
          ret = 2;
          break;
        case 2:
          ret = 4;
          break;
        case 3:
          ret = 8;
          break;
        case 0:
          ret = 6;
          break;
      }
      break;
    case 3:
      switch (n%4)
      {
        case 1:
          ret = 3;
          break;
        case 2:
          ret = 9;
          break;
        case 3:
          ret = 7;
          break;
        case 0:
          ret = 1;
          break;
      }
      break;
    case 4:
      switch (n%2)
      {
        case 1:
          ret = 4;
          break;
        case 0:
          ret =6;
          break;
      }
      break;
    case 5:
      ret =5;
      break;
    case 6:
      ret =6;
      break;
    case 7:
      switch (n%4)
      {
        case 1:
          ret = 7;
          break;
        case 2:
          ret = 9;
          break;
        case 3:
          ret = 3;
          break;
        case 0:
          ret = 1;
          break;
      }
      break;
    case 8:
      switch (n%4)
      {
        case 1:
          ret = 8;
          break;
        case 2:
          ret = 4;
          break;
        case 3:
          ret = 2;
          break;
        case 0:
          ret = 6;
          break;
      }
      break;
    case 9:
      switch (n%2)
      {
        case 1:
          ret = 9;
          break;
        case 0:
          ret = 1;
          break;
      }
      break;   
  }
 
  return ret;
}

int ncalcul(int n)
{
  int s = 0;
  for(int i=1;i<=n;i++)
  {
    s += calcul(i);
    if(s > 9)
      s = s%10;
  }
  return s;
}


int main()
{
 //78907809780 -- asta nu merge, mi imi da 2 si voua 6 , dar de ce ?

    int n = 0, k = 0;
  freopen("cifra.in","r",stdin);
  freopen("cifra.out","w",stdout);
  scanf("%d",&n);
  for(int i=1;i<=n;i++)
  {
    scanf("%d",&k);
    int nr = k;
    int x = (((nr/20)%10)*4)%10;
    int y = ncalcul(nr%20);
    int z = (x+y)%10;
    printf("%d\n",z);
    //k = ncalcul(k);
    //printf("%d\n",k);
  }
  return 0;
}


Titlul: Răspuns: 008 Cifra
Scris de: Sima Cotizo din Mai 09, 2010, 02:29:53
Citesti int-uri. N poate sa aiba si 100 de cifre. Deeeeci... solutia ta e gresita :)

Data viitoare, cand vezi ca exista solutii de 100 puncte [si chiar multe], indoieste-te de faptul ca toti ar fi gresit si doar tu ai dreptate! ;)


Titlul: Răspuns: 008 Cifra
Scris de: alexandru din Mai 09, 2010, 07:04:29
dar totusi trebuie un algoritm de suma pentur numere mari
Nu, sunt necesare doar ultimile 2 cifre ale numarului :)
@Super Smecher  Poate iti merge tie pana 5*10^4 dar limita este 10^100.


Titlul: Răspuns: 008 Cifra
Scris de: Super Smecher din Mai 10, 2010, 05:34:20
Merci!


Titlul: Răspuns: 008 Cifra
Scris de: FMIAnita Liviu din Mai 26, 2010, 21:12:44
Salut...am scos si eu ceva,insa nu functioneaza cum trebuie:
Cod:
#include<fstream.h>
#include<iostream.h>
int numars(int j);
int numarp(int j);
int n;
int main(){
int t;
ifstream fin("cifra.txt");
ofstream fout("cifra1.txt");
fin>>t;
for(;t!=0;--t){
fin>>n;
fout<<numars(n)<<endl;}
return 0;}
int numarp(int j){
int x=j,numar=1;
while(x!=0){
numar=numar*n;
if(numar>=10)
numar%=10;
--x;}
return numar;}
int numars(int j){
int s=0,N=n;
while(N!=0){
s+=numarp(N);
if(s>=10)
s%=10;
--N;}
return s;}
Nu pot sa imi dau seama unde este problema...am simplificat treburile cat mai mult... (asta inteleg eu prin scurtarea codului,mi se pare mai simplu de citit).Pentru datele de intrare din exemplu,in fisier mie imi scrie 1 6 9 0 5.Ma poate ajuta cineva?

PrecizarI:
-functia numars ar trebui sa se ocupe de ultimul numar al sumei numerelor pana la y
-functia numarp ar trebui sa se ocupe de ultimul numar al lui y la puterea y
-intrarea/iesirea am facut-o in fisiere .txt ca sa testez programul,mi s-a parut inutil sa schimb formatul, fiindca banuiesc, ca si voi tot in .txt le testati (si mi-e o leneee... )


Titlul: Răspuns: 008 Cifra
Scris de: Simoiu Robert din Mai 27, 2010, 11:18:13
Citat
ATENTIE! 1 ≤ N < 10100. Numerele trebuie citite ca siruri de caractere!

Este a 10 oara cand se spune in topic de chestia asta, si in legatura cu txt, credema, e mai lesne sa pui .in si .out, eu nu imi fac testele cu txt, pentru ca oricum trebuie create fisierele in / out.  Iar in legatura cu programul tau, pe numere mici, la numarp, unde ai numar *= n, trebuie pus numar *= j;


Titlul: Răspuns: 008 Cifra
Scris de: Pripoae Teodor Anton din Mai 27, 2010, 12:01:08
Salut...am scos si eu ceva,insa nu functioneaza cum trebuie:
Cod:
#include<fstream.h>
#include<iostream.h>
int numars(int j);
int numarp(int j);
int n;
int main(){
int t;
ifstream fin("cifra.txt");
ofstream fout("cifra1.txt");
fin>>t;
for(;t!=0;--t){
fin>>n;
fout<<numars(n)<<endl;}
return 0;}
int numarp(int j){
int x=j,numar=1;
while(x!=0){
numar=numar*n;
if(numar>=10)
numar%=10;
--x;}
return numar;}
int numars(int j){
int s=0,N=n;
while(N!=0){
s+=numarp(N);
if(s>=10)
s%=10;
--N;}
return s;}
Nu pot sa imi dau seama unde este problema...am simplificat treburile cat mai mult... (asta inteleg eu prin scurtarea codului,mi se pare mai simplu de citit).Pentru datele de intrare din exemplu,in fisier mie imi scrie 1 6 9 0 5.Ma poate ajuta cineva?

PrecizarI:
-functia numars ar trebui sa se ocupe de ultimul numar al sumei numerelor pana la y
-functia numarp ar trebui sa se ocupe de ultimul numar al lui y la puterea y
-intrarea/iesirea am facut-o in fisiere .txt ca sa testez programul,mi s-a parut inutil sa schimb formatul, fiindca banuiesc, ca si voi tot in .txt le testati (si mi-e o leneee... )


Salut

Numerele sunt pana in 10^100 deci trebuie citite ca sir de caractere. O alta posibilitate ar fi sa citesti ultimele 2 cifre. Ai sa vezi ca din 20 in 20 se repeta cifrele.


Titlul: Răspuns: 008 Cifra
Scris de: Irina Dumitrescu din Iunie 06, 2010, 00:20:08
La aceasta problema nu pot folosi biblioteca math? Am uploadat codul si erorile mele sunt acestea:

user.cpp:4:16: error: math: No such file or directory
user.cpp:27:2: warning: no newline at end of file
user.cpp: In function 'int suma(int)':
user.cpp:11: error: 'pow' was not declared in this scope


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Grigorean din Iunie 06, 2010, 01:38:29
Libraria <math> nu e standard. Poti folosi <cmath> sau <math.h>


Titlul: Răspuns: 008 Cifra
Scris de: FMI Paun Matei din Septembrie 07, 2010, 09:45:50
de ce trebuie sa puna timp 0,1 secunde
acum am luat 0 ](*,)
de ce imi iese din timp
uite programul
Cod:
#include<stdio.h>
long v[1001],s,e,r,i,n,j;
int main()
{
freopen("cifra.in","r",stdin);
freopen("cifra.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++)
scanf("%ld",&v[i]);
for (i=1;i<=n;i++)
{
r=v[i]/10;
e=v[i]%10;
if (r>0)
s=1;
else
s=0;
for (j=1;j<=r;j++)
s=s*7;
if (e==1) s=s+1;
if (e==2) s=s+5;
if (e==3) s=s+2;
if (e==4) s=s+8;
if (e==5) s=s+3;
if (e==6) s=s+9;
if (e==7) s=s+2;
if (e==8) s=s+8;
if (e==9) s=s+7;
printf("%ld\n",s%10);
}
}

[editat de moderator] foloseste tag-ul "code" cand postezi cod pe forum


Titlul: Răspuns: 008 Cifra
Scris de: Vlad Tarniceru din Septembrie 07, 2010, 10:23:34
problema e cu numere mari, deci rezolvarea ta nu are cum sa mearga.

in primul rand tu le citesti ca numere mici, in restrictiile problemei spune ca:

ATENTIE! 1 ≤ N < 10^100. Numerele trebuie citite ca siruri de caractere!

10^100 inseamna 10 la puterea 100, deci un numar care nu intra in long (care admite 10 cifre maxim)

in al doilea rand nici rezolvarea nu mi se pare tocmai buna  :-k

Hint : incearca sa generezi primele 500 de numere asa, sa vezi daca este vreo regula dupa care se repeta sau ceva (sau citeste ce a zis teodor pripoae mai sus :) ) :-'

succes ! :peacefingers:


Titlul: Răspuns: 008 Cifra
Scris de: Ursu filip din Noiembrie 10, 2010, 18:10:22
nu stiu ce am gresit ma puteti ajuta?
am luat 10 pct


Titlul: Răspuns: 008 Cifra
Scris de: Simoiu Robert din Noiembrie 10, 2010, 18:12:23
1. Editeaza-ti mesajele
2. Nu stiu unde vezi tu 10 pct, ca eu nu vad nicio sursa trimisa de tine.


Titlul: Răspuns: 008 Cifra
Scris de: Dumitraiche Marius-Alexandru din Decembrie 07, 2010, 16:40:42
fratilor ce trebuie sa fac la eroarea asta?


error: invalid operands of types `double' and `int' to binary `
operator%'


Titlul: Răspuns: 008 Cifra
Scris de: Simoiu Robert din Decembrie 07, 2010, 16:51:21
Din cate banuiesc, ai facut ceva de genul : X % Y, unde X e de tip double. Modulo se aplica doar la numere intregi .


Titlul: Răspuns: 008 Cifra
Scris de: Lupu Alexandru Gabriel din Decembrie 23, 2010, 18:20:36
Imi poate explica si mie cineva de ce nu primesc nici un punct pt programul asta

Cod:
#include<fstream.h>
#include<iostream.h>
int main()
{unsigned int  v[11],v1[10000],i,n,s,aux;
 ifstream f("cifra.in");
 ofstream g("cifra.out");
 f>>n;
 v[0]=0;v[1]=1;v[2]=5;v[3]=2;v[4]=8;v[5]=3;v[6]=9;v[7]=2;v[8]=8;v[9]=7;
 
 for(i=0;i<n;i++)
f>>v1[i];
 for(i=0;i<n;i++)
{s=v1[i]%10;
     aux=v1[i]/10;
g<<(aux*7+v[s])%10<<endl;
}
 f.close();
 g.close();
 return 0;
}

pentru valorile de pana la 21 marge la fel si pentru o valoare oarecare ,cel putin la mine :-'

Editat de moderator : Foloseste tagurile [ code ] [ /code ] cand postezi cod


Titlul: Răspuns: 008 Cifra
Scris de: Vlad Eugen Dornescu din Decembrie 23, 2010, 19:18:52
Pentru aceasta problema accesul la toate sursele trimise este liber!
Ia o sursa, baga valori sa vezi ca nu-ti da bine pentru toate.


Titlul: Răspuns: 008 Cifra
Scris de: Gabriel Bitis din Februarie 16, 2011, 08:49:49
Discutia pe subiectul pascal vs C a fost mutata în Feedback infoarena (http://infoarena.ro/forum/index.php?board=33).

http://infoarena.ro/forum/index.php?topic=5272.0 (http://infoarena.ro/forum/index.php?topic=5272.0)


Titlul: Răspuns: 008 Cifra
Scris de: Dan Ganea din Martie 23, 2011, 23:23:34
Am si eu o  nelamurire, cum v-ati dat seama ca se repeta ultima cifra din 20 in 20?
Exista o demonstratie matematica sau...?


Titlul: Răspuns: 008 Cifra
Scris de: Alexandru Meterez din Martie 28, 2011, 19:20:15
 :? Umm, imi explica si mie cineva ce este acest vector (l-am luat dintr-o sursa):
int a[100]={0 ,1 ,5 ,2 ,8 ,3 ,9 ,2 ,8 ,7 ,7 ,8 ,4 ,7 ,3 ,8 ,4 ,1 ,5 ,4 ,4 ,5 ,9 ,6,2 ,7 ,3 ,6 ,2 ,1 ,1 ,2 ,8 ,1 ,7 ,2 ,8 ,5 ,9 ,8 ,8 ,9 ,3 ,0 ,6 ,1 ,7 ,0 ,6 ,5 ,5 ,6 ,2 ,5 ,1 ,6 ,2 ,9 ,3 ,2 ,2 ,3 ,7 ,4 ,0 ,5 ,1 ,4 ,0 ,9 ,9 ,0 ,6 ,9 ,5 ,0 ,6 ,3 ,7 ,6 ,6 ,7 ,1 ,8 ,4 ,9 ,5 ,8 ,4 ,3 ,3 ,4,0 ,3 ,9 ,4 ,0 ,7 ,1 ,0};
Adica ce contine(ce semnifica toate acele cifre).
P.S.: Este din sursa lui Tutunaru Andrei.  :oops:


Titlul: Răspuns: 008 Cifra
Scris de: Tirla Alin din Aprilie 07, 2011, 12:34:30
tocmai am facut problema cifra si am citit intrebarea ta (alex)
vectoru ala de 100 reprezinta ultima cifra a sumei pana la acel indice de exemplu sir[2]=5 deci 5 o sa fie ultima cifra a sumei pana la 2... poate te intrebi la ce foloseste asta ei bine poti observa ca ultima cifra la suma se repeta din 100 in 100 deci ajunge sa calculezi o data ultima cifra pana la 100 si apoi faci afisare de vector[testul%100]

sper ca ai inteles ce ti-am explicat... daca nu dami un pm siti explic mai amanuntit


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Geogescu din Iunie 16, 2011, 23:15:29
este posibil sa primesc testele?


Titlul: Răspuns: 008 Cifra
Scris de: Paul-Dan Baltescu din Iunie 17, 2011, 00:35:32
Nu. Testele de la problemele din arhiva principala nu se fac publice.


Titlul: Răspuns: 008 Cifra
Scris de: Alexandra Soare din Ianuarie 25, 2012, 22:50:44
Am si eu o intrebare.De ce punctajul la problema este 0 daca mie im calculator imi rezolva complet problema? Am inteles ca se tine cont si daca problema este rezolvata optim,dar totusi,0 puncte? Multumesc. :D

#include<iostream>
#include<fstream>
using namespace std;
int main()
{int n,y=1,s=0,z,p;
ifstream f1("cifra.in");
ofstream f2("cifra.out");
f1>>n;
while(y<=n)
{z=y;p=1;
while(z!=0)
   {p=p*y;
   z--;}
s=s+p;
y++;
f2<<s%10;
f2<<endl;
f1>>n;}
f1.close();
f2.close();
return 0;}


Titlul: Răspuns: 008 Cifra
Scris de: Paunel Cosmin din Ianuarie 26, 2012, 04:11:37
In primul rand nu citesti toate numerele si n-ul poate sa fie de maxim 100 de cifre. Plus ca rezolvarea ta nu e optima. Trebuie sa citesti cu atentie enuntul.


Titlul: Răspuns: 008 Cifra
Scris de: Alexandru Doda din Februarie 07, 2012, 22:52:43
Salut! Am facut si eu problema si mie imi merge bine programul pentru toate valorile N. Totusi, sistemul de verificare imi da 0 puncte. Va puteti uita putin peste el? Nu stiu de ce nu merge.

Cod:
#include<fstream>
#include<math.h>
using namespace std;
int main(){
int t,n,s=0,i,j,r;
ifstream f("cifra.in");
ofstream g("cifra.out");
f>>t;
if(t>=1&&t<=30000)
for(i=1;i<=t;i++){
f>>n;
if(n>=1&&n<pow(10,100))
for(j=1;j<=n;j++){
s=s+pow(j,j);
}
r=s%10;
g<<r<<endl;
s=0;
}
f.close();
g.close();
}


Titlul: Răspuns: 008 Cifra
Scris de: onisim necula din Februarie 28, 2012, 19:46:55
imi spuneti si mie ce am gresit ?
Cod:
#include<cstdio>
#include<cstring>
using namespace std;
FILE *f,*g;
int n,uc,i,a[10];
char c,c1,c2;
int main()
{f=fopen("cifra.in","r");
g=fopen("cifra.out","w");
fscanf(f,"%d%c",&n,&c);
a[0]=0;
a[1]=1;
a[2]=5;
a[3]=2;
a[4]=8;
a[5]=3;
a[6]=9;
a[7]=2;
a[8]=8;
a[9]=7;
for(i=1;i<=n;++i)
{fscanf(f,"%c",&c);
c1=48;
c2=48;
while(c!='\n')
{c2=c1;
c1=c;
fscanf(f,"%c",&c);
}
uc=((c2-48)*7+a[c1-48])%10;
fprintf(g,"%d\n",uc);
}
fclose(f);
fclose(g);
return 0;
}


Titlul: Răspuns: 008 Cifra
Scris de: Coltsishor Victor Vasile din Mai 09, 2012, 18:36:19
Depasire, din ce cauza? Am scazut numarul variabilelor la minimum. Job'ul: http://infoarena.ro/job_detail/744765 (http://infoarena.ro/job_detail/744765)


Titlul: Răspuns: 008 Cifra
Scris de: Sorin Rita din Mai 09, 2012, 19:04:31
Depasesti timpul de executie care nu e influentat de numarul de variabile(decat in cazul in care ai declara niste vectori mai mari sau , ma rog, mai multa memorie). Ti se spune la precizari ca N-ul poate avea pana la 100 de cifre, deci nu se incadreaza in niciun tip de date. Problema nu se face cum ai incercat tu, adica sa calculezi efectiv acea valoare, ci se bazeaza pe niste observatii matematice. Citeste ce s-a mai scris pe topicul asta si gasesti destule idei.




Titlul: Răspuns: 008 Cifra
Scris de: Ilie Andrei din Mai 23, 2012, 09:16:09
Imi poate spune si mie cineva, va rog frumos, cum imi poate iesi din timp problema aceasta :D


Titlul: Răspuns: 008 Cifra
Scris de: Simoiu Robert din Mai 23, 2012, 10:52:27
Citesti caracter cu caracter, si ia mult timp aceasta citire :).


Titlul: Uita de "endl" la problemele cu limita de timp
Scris de: Soucup Nicolae Silviu din Noiembrie 09, 2012, 21:43:13
Diferenta dintre 60 de puncte (cu 4 TLE-uri) si 100 de puncte este ca diferenta dintre endl si char(0x0A)

P.S.- In afara de citirea caractel cu caractel mai exista si citirea liniara (cate o linie odata)


Titlul: Răspuns: 008 Cifra
Scris de: ADD DDA din Ianuarie 19, 2013, 18:52:40
Salut, imi poate spune cineva cu ce gresesc aici?
Cod:
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("cifra.in");
ofstream fout("cifra.out");
int main()
{ int n,s,f,i;
fin>>n;
s=0;
for(i=1;i<=n;i++){f=pow(i,i);s=s+f;}
fout<<s-(s/10)*10;
return 0;
}


Titlul: Răspuns: 008 Cifra
Scris de: Puscas Sergiu din Ianuarie 19, 2013, 21:02:28
1 ≤ N < 10^100, ceea ce inseamna ca nu ai cum sa-l ridici la puterea N, si nici macar sa stochezi numarul intr-un tip de date numeric (depaseste cu mult long long). citeste comentariile anterioare, incearca sa vezi daca te poti folosi doar de o mica parte din cifrele numarului dat. sper ca ti-am fost de ajutor :)


Titlul: Răspuns: 008 Cifra
Scris de: Bura Bogdan din Ianuarie 19, 2013, 23:37:48
ce am observat eu ii ca de la un timp se tot repeta:D de ex
pt:
2 -> 5
52 -> 6
102 -> 7
si tot asa..
si deci la 502 -> 5 o ia exact de la inceput


Titlul: Răspuns: 008 Cifra
Scris de: Torok Istvan din Februarie 04, 2013, 11:32:22
nu stiu de ce nu primesc puncte pe acest program...
va rog sa ma ajutati.
programul :

type matrix=array[0..10,0..10]of longint;
     sor =array[0..10]of longint;
 
var a:matrix;
    b:sor;
    i,j,n,x,o,y:longint;
    f,g:text;
 
begin
{0-1}
a[0,0]:=0;
a[1,1]:=1;
a[1,0]:=1;
b[0]:=1;
b[1]:=1;
 
{2}
a[2,1]:=2;
a[2,2]:=4;
a[2,3]:=8;
a[2,0]:=6;
b[2]:=4;
{3}
a[3,1]:=3;
a[3,2]:=9;
a[3,3]:=7;
a[3,0]:=1;
b[3]:=4;
{4}
a[4,1]:=4;
a[4,0]:=6;
b[4]:=2;
{5}
a[5,1]:=5;
a[5,0]:=5;
b[5]:=1;
{6}
a[6,1]:=6;
a[6,0]:=6;
b[6]:=1;
{7}
a[7,1]:=7;
a[7,2]:=9;
a[7,3]:=3;
a[7,0]:=1;
b[7]:=4;
 
{8}
a[8,1]:=8;
a[8,2]:=4;
a[8,3]:=2;
a[8,0]:=6;
b[8]:=4;
{9}
a[9,1]:=9;
a[9,0]:=1;
b[9]:=2;
 
 
{for i:=0 to 9 do begin writeln;
    for j:=0 to b do write(a[i,j],' ');
    end;}
 
 
 
{for i:=2 to 9 do begin
 
j:=0;
x:=i;
while a[i,1]<>x mod 10 do begin
                        inc(j);
                        a[i,j]:=x mod 10;
                        x:=x*i;
                        end;
b:=j;
end; }
 
 
 
assign(f,'cifra.in');reset(f);
assign(g,'cifra.out');rewrite(g);
 
readln(f,n);
 
for j:=1 to n do begin
                 readln(f,x);
 
                 o:=0;
                 for i:=1 to x do begin
                 y:=i mod 10;
                 if y<>0 then
                 o:=o+(a[y,i mod b[y]]);
                 o:=o mod 10;
                 end;
                 writeln(g,o);
                 end;
 
 
 
                {o:=1;
                 if x>1 then
                 for j:=2 to x do  begin
                 y:=i;
                 m:=y mod 10;
                 y:=y mod b[m];
                 o:=o+a[m,y];
                 end;
 
                 writeln(g,o mod 10);
                 end;   }
 
 
 
close(f);
close(g);
 
end.


Titlul: Răspuns: 008 Cifra
Scris de: Adam Alexandru din Februarie 27, 2013, 20:32:26
#include<fstream>
#include<cmath>
using namespace std;
int main()
{ int i,c,s=0,t,j;
  long long n; 
  ifstream cin("cifra.in");
  ofstream cout("cifra.out");
  cin>>t;
  for(j=1;j<=t;j++)
   {   cin>>n;
      for(i=1;i<=n;i++)
       {  c=pow(i,i);
         s+=c; }
      cout<<s%10<<endl;
      s=0;
   }
  cin.close();
  cout.close();
  return 0;
}


Pot sa aflu si eu ce are ?!


Titlul: Răspuns: 008 Cifra
Scris de: Stefanescu Mihai-Nicolae din Martie 05, 2013, 09:32:32
long long n; 
.....
 cin>>n; 

Cel mai mare numar care incape in long long e pe undeva la 10^20. N poate avea valori de la 1 la 10^100.


Titlul: Răspuns: 008 Cifra
Scris de: Bratie Fanut din Martie 05, 2013, 16:42:56
as putea posta sirul preprocesat pe care l-am generat, ca sa vad daca este corect? s-au trebuie sa trimit pm unui admin?

LE:nu mai e nevoie. am aflat. era corect. :)


Titlul: Răspuns: 008 Cifra
Scris de: agent47 din Noiembrie 20, 2013, 20:02:51
De ce nu merge nu inteleg.Poate vede cineva?
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ifstream f("cifra.in");
ofstream g("cifra.out");
int n,i,x,j,m;
f>>n;
for(i=1;i<=n;i++)
   {f>>x;
m=0;
for(j=1;j<=x;j++)
{if(j%10==1 || j%10==5 || j%10==6)
m=(m+j%10)%10;
   if(j%10==4 || j%10==9)
      if(j%2==1)
      m=(m+j%10)%10;
   else
      m=(m+j*j)%10;
   if(j%10==7 ||j%10== 8 || j%10==2 || j%10==3)
   if(j%4==1)
         m=(m+j)%10;
   else
      if(j%4==2)
            m=(m+j*j)%10;
         else

if(j%4==3)
   m=(m+(j*j*j)%10)%10;
else
if(j%4==0)
   m=(m+(j*j*j*j))%10;}
g<<m<<'\n';}
}


Titlul: Răspuns: 008 Cifra
Scris de: Iulia Moldovan din Decembrie 04, 2014, 20:14:15
Buna seara!
La problema aceasta am 0 puncte, pentru ca am depasit timpul de executie. Ati putea, daca nu va cer prea mult, sa imi dati o sugestie in legatura cu ce as putea face sa nu depaseasca? Va multumesc mult!
Acesta este codul:
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("cifra.in");
ofstream fout("cifra.out");
int main()
{
    int t,x[30001];
    fin>>t;
    for(int i=0;i<t;i++)
        fin>>x;
    for(int i=0;i<t;i++)
    {
        int cop=x,s=0;
        while(cop>0)
        {
            s+=pow(cop,cop);
            cop--;
        }
        fout<<(s%10)<<"\n";
    }
    return 0;
}


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Constantinescu din Decembrie 05, 2014, 11:46:26
Ai grija la urmatoarea restrictie din enunt:
Citat
ATENTIE! 1 ≤ N < 10100. Numerele trebuie citite ca siruri de caractere!


Titlul: Răspuns: 008 Cifra
Scris de: Ionut Redox din Decembrie 06, 2014, 13:22:08
Poate sa ma contrazica oricine ca programul meu nu functioneaza ! Merge 100% !

#include <iostream>
#include <fstream>
using namespace std;
int putere(int x,int y)
{
    int p=1;
    for(int i=1;i<=y;i++)
        p*=x;
    return p;
}

int main()
{
    ifstream f("cifra.in");
    int t,v[30],i,n;
    f>>t;
    ofstream g("cifra.out");
    for(i=1;i<=t;i++)
    {
        f>>v;
        int n=0;
        for(int j=1;j<=v;j++)
            n+=putere(j,j);
        g<<n%10<<endl;
    }
    f.close();
    g.close();
}



Titlul: Răspuns: 008 Cifra
Scris de: Mihai Calancea din Decembrie 06, 2014, 13:33:20
Cât îți dă pe 100?


Titlul: Răspuns: 008 Cifra
Scris de: Andrei Dulceanu din Martie 05, 2015, 12:58:21
Salut! Cred ca e o problema cu monitorul de evaluare pentru sursele scrise in Java, in sensul in care ar trebui marita limita de timp. Si pentru "Jocul Flip" am aceeasi problema, desi algoritmul este corect, nu pot lua mai mult de 60p. Puteti verifica va rog?


Titlul: Răspuns: 008 Cifra
Scris de: Raul Gavris din Octombrie 24, 2015, 15:43:59
Salut.Imi poate spune cineva va rog frumos ce inseamna chestia aia cu -'0'?
Ca am vazut intr-o gramada de surse.


Titlul: Răspuns: 008 Cifra
Scris de: theprdv din Noiembrie 01, 2015, 19:19:05
Transformare din char in int. O variablia char memoreaza o anumita valoare din tabelul ascii ( http://www.asciicharstable.com/index.php?com=content&mod=dynamic&task=ascii&id=6 ). '0' == 48, deci pt. transformare '9' (tip char) in int se face '9' - '0'  (adica 57 - 48). Uita-te pe codul ascii si intelegi


Titlul: Răspuns: 008 Cifra
Scris de: Albu Cristian-Gabriel din Ianuarie 18, 2016, 17:46:22
Cat de scurt trebuie sa fie algoritmu' de 2 randuri??? :evil:


Titlul: Răspuns: 008 Cifra
Scris de: M. Gardner din Februarie 22, 2016, 19:18:54
cineva stie ce e problema cu aceasta?
Cod:
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;

int main()
{
    cout<<pow(2,2);
    ifstream f("cifra.in");
    ofstream g("cifra.out");
    int t,n,outnum;
    f>>t;
    for(int i=0;i<t;i++){
f>>n;
outnum=0;
for(int j=1;j<=n;j++){
outnum+=pow(j,j);
}
g<<outnum%10<<endl;
    }
    return 0;
}
spune  "Time limit exeeded."


Titlul: Răspuns: 008 Cifra
Scris de: Vozian Valentin din Iulie 05, 2016, 12:00:27
Este vre-o demonstratie de ce conteaza doar ultimile 2 cifre ?


Titlul: Răspuns: 008 Cifra
Scris de: Vlasceanu Silviu din Decembrie 08, 2016, 02:06:49
Sustin ce s-a spus si mai inainte: ar trebui marit intervalul de testare pentru java. Probleme rezolvate similar in c++ primesc punctaj maxim, pe cand cele in java primesc maxim 70 de puncte.


Titlul: Răspuns: 008 Cifra
Scris de: Nicolae Filat din Mai 05, 2017, 21:04:04
Nu inteleg ceva la input .... dai input T si dupa aceea numerele pe T linii trebuie sa fie consecutive??


Daca ar fi consectutive care ar mai fi logica sa dai inpout la ele ??


Titlul: Răspuns: 008 Cifra
Scris de: Balanici Andrei Daniel din Aprilie 13, 2018, 21:46:52
#include <iostream>
#include <fstream>
#include <math.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
ifstream f("cifra.in");
ofstream g("cifra.out");
int T,P[]={0,1,5,2,8,3,9,2,8,7},lg;
int I[]={0,1,7,0,6,1,7,4,8,7};
long S,cat;
char Numar[1000001][105],caracter,caracter1;

int main()
{
     f>>T;
     for(int i=1;i<=T;i++)
     {
         f.get(); f.get(Numar,105);
         lg=strlen(Numar); S=0;
         caracter=Numar[lg-2]; caracter1=Numar[lg-1];
         if(((atoi(&caracter)/10)%10)%2==0)
         { S+=2*((atoi(&caracter)/10)%10); S+=P[atoi(&caracter1)]; }
         else
         { S+=2*(((atoi(&caracter)/10)%10)-1)+7; S+=I[atoi(&caracter1)]; }
         g<<S%10<<'\n';
     }
    return 0;
}
Uitati-va va rog mult la acerst cod.L-am testat cu alte coduri de 100 de puncte si rezultatele mi le da la fel,Dar cand il dau la evaloare iau 0 puncte.Nu stiu unde gresesc.


Titlul: Răspuns: 008 Cifra
Scris de: Ardeleanu Vlad George din Iulie 19, 2018, 12:04:03
Va rog, imi poate verifica cineva sursa trimisa la urmatoare adresa:

https://infoarena.ro/job_detail/2223201?action=view-source

Pe exemplul dat imi merge, dar nu-mi pot da seama ce merge prost cand e evaluat.
Va mulutmesc in avans.


Titlul: Răspuns: 008 Cifra
Scris de: Bogdan Pop din Iulie 19, 2018, 16:07:30
Functia atol returneaza un long int(C++ reference).Numerele nu intra in long int,deci ar trebui ca numarul sa ramana sub forma de sir de caractere(sau vector in general).De asemenea,nu stiu daca functia atol se poate folosi la OJI deci nu prea ar fi recomandata,si functia pow cred ca ar fi de preferat sa o scrii de mana in general(are doar cateva tipuri de parametrii acceptati,si e posibil sa nu mearga in unele cazuri).


Titlul: Răspuns: 008 Cifra
Scris de: Ardeleanu Vlad George din Iulie 19, 2018, 19:58:12
Bodo171/Bogdan Pop. Multumesc pt sugestii. Pana la urma am reusit sa rezolv problema :D


Titlul: Răspuns: 008 Cifra
Scris de: alexandra adela din Septembrie 27, 2018, 12:43:48
problema este frumoasa dar grea:shock: :shock: :shock: :shock  :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:


Titlul: Intrebare!
Scris de: Afloarei Andrei din Ianuarie 29, 2019, 15:03:37
Va salut!
Sunt nou pe acest site si aceasta problema este prima la care am incarcat codul pentru evaluare.
Pe laptop programul care l-am scris merge bine dar evaluatorul imi da 0 puncte si nu inteleg de ce.
Aici e codul:
https://infoarena.ro/job_detail/2331277?action=view-source

Ce anume nu am facut bine?

Multumesc
       A.A.


Titlul: Răspuns: 008 Cifra
Scris de: Ciocoiu Vlad din Iunie 03, 2019, 22:30:53
Am memorat solutiile pt n <= 100 intr-un vector si am afisat solutia pt ultimele 2 cifre ale numerelor, dar tot epasesc timpul de executie si iau 60p si nu inteleg de ce.. Ma poate ajuta cineva?


Titlul: Răspuns: 008 Cifra
Scris de: Todor Marian Gabriel din Iulie 24, 2019, 14:45:25
salutare..incerc sa rezolv problema aceasta ..si tot imi da 0 puncte..
Cod:

#include<fstream>
#include<cmath>
using namespace std;
ifstream f ("cifra.in");
ofstream g ("cifra.out");
int t,v[30001];
long long n,s,i,j;
int main()
{
    f>>t;
    for(i=1;i<=t;i++)
        f>>v;
    for(i=1;i<=t;i++)
        {s=0;
        for(j=1;j<=v;j++)
            s = s + pow(j,j);
        g<<s%10<<endl;}



}