Informatică, întrebare adresată de Utilizator anonim, 8 ani în urmă

Am nevoie de ajutor va roooooog ! la aceasta pb de info va roooooooog . dau coroana !!!!!!!!!!


Se cunoaşte un număr natural k. Dorim să obţinem un tablou unidimensional a, cu elemente naturale constituite astfel: a[1] = un număr de două cifre (cifra zecilor a lui a[1] este cifra sutelor produsului k*k, iar cifra unităţilor lui a[1] este cifra zecilor produsului k*k).
Pentru i>1, a[i] se obţine astfel: a[i] = un număr de două cifre (cifra zecilor a lui a[i] este cifra sutelor produsului a[i-1]*a[i-1], iar cifra unităţilor lui a[i] este cifra zecilor produsului a[i-1]*a[i-1]).
Procesul de generare a termenilor tabloului se încheie în momentul când este generat un număr ce a mai fost generat înainte. Ultimul număr (cel ce se repetă) nu face parte din tablou.
Observaţie
Este posibil ca numerele numite în text ca fiind de “două cifre” să aibă de fapt doar o cifră, în cazul în care cifra zecilor lor este 0; ele pot fi chiar şi 0.

Cerinţă
Scrieţi un program care:
a) să afişeze elementele tabloului obţinut;
b) să afişeze elementele tabloului obţinut, dar sortate crescător după prima lor cifră (cea mai din stânga).
Precizări
1) La cerinţa a doua: dacă două sau mai multe elemente din tabloul a au aceeaşi primă cifră, atunci aceste elemente se pot afişa în orice ordine ce respectă cerinţa. În exemplul de mai jos, afişarea pentru cerinţa a doua putea fi şi sub forma: 0 2 25 5 62 84, adică am interschimbat 2 cu 25, pentru că ambele au prima cifră 2; în acest caz, alte posibilităţi de afişare nu mai sunt.
2) Pentru prima cerinţă rezolvată corect se atribuie 60% din punctaj, iar pentru a doua, încă 40% din punctaj.

Date de intrare
De pe prima linie a fişierului de intrare sir4.in se citeşte numărul k.

Date de ieşire
Pe prima linie a fişierului de ieşire sir4.out se vor afişa elementele tabloului a, în ordinea generării lor, separate prin câte un spaţiu.
Pe a doua linie a fişierului se vor afişa elementele tabloului a, în ordinea cerută la cerinţa a doua; elementele vor fi separate prin câte un spaţiu.

Restricţii
Numărul k este natural, 11<=k<=999

Exemple
sir4.in sir4.out Explicaţii
16
25 62 84 5 2 0
0 2 25 5 62 84
a) k*k=16*16=256; a[1]=25;
25*25=625; a[2]=62;
62*62=3844; a[3]=84
84*84=7056; a[4]=5;
5*5=25; a[5]=2;
2*2=4; a[6]=0
0*0=0 şi aici se opreşte generarea tabloului cu 6 elemente, care se afişează.
b) a[1]=25; prima sa cifră este 2;
a[2]=62; prima sa cifră este 6;
a[3]=84; prima sa cifră este 8;
a[4]=5; prima sa cifră este 5;
a[5]=2; prima sa cifră este 2;
a[6]=0; prima sa cifră este 0.
În urma sortării acestor prime cifre: 2 (asociată cu a[1]), 6 (asociată cu a[2]), 8 (asociată cu a[3]), 5 (asociată cu a[4]), 2 (asociată cu a[5]) şi 0 (asociată cu a[6]), se obţine ordinea nouă a acestor numere: 0, 2, 2, 5, 6, 8, asociate respectiv cu elementele din tabloul a: 0, 25, 2, 5, 62, 84; elementele din a se vor afişa în aceasta ordine, sau în ordinea: 0, 2, 25, 5, 62, 84.

Multumesc anticipat!


Utilizator anonim: nu , nu este de acolo . este de pe campion edu ( de acolo ne pune mereu profa sa lucram , deci mereu vor fi pb de pe acest site) . este pb " sir4" , data la OJI 2005 , oricum o gasesti daca scrii sir4 la ,,cautare" . mersi ca te oferi sa ma ajuti !! :) Ai gasit?
boiustef: da, găsit..
Utilizator anonim: :)
boiustef: 88 puncte
Utilizator anonim: o poti face de 100 te rog ( daca poti pllssssss)
boiustef: 100 pct ...
Utilizator anonim: BRAVOOOOO !!!!!!!!!!!!!
Utilizator anonim: MERSI MULT ! POTI SA O MAI FACI SI PE ,,SALVARE" TE ROG , DACA VREI , TE ROG FOARTE FRUMOS , E ULTIMA PE CARE TI-O MAI CER , TE ROOOOOG !(am o tema complicata pe vacanta , si eu nu sunt chiar buna prietena cu informatica , asa ca sper sa intelegi )
boiustef: cere ajutor de la altcineva. cu grafuri încă nu sunt prieten ... :)))
Utilizator anonim: ok , dar pe ,,pestera" tot de pe campion edu crezi ca poti , te rog din sufleeet ( nu e cu grafuri ) . poti sa incerci plsss

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("sir4.in");

ofstream fout("sir4.out");

int k, i, num, a[100], fr[100],m, stop;

int main()

{

   fin >> k;

   num=k*k;

   num=num%1000;

   a[1]=(num/100)*10+(num/10)%10;

   i=1; stop=0;

   while (!stop)

   {

      fr[a[i]]=1;

      num=a[i]*a[i]%1000;

      m=(num/100)*10+(num/10)%10;

      if (fr[m]==0) { ++i; a[i]=m;}

      else { stop=1; m=i;}

   }

   for (i=1; i<=m; ++i)

       fout << a[i] << " ";

   fout << endl;

   if (fr[0]==1) fout << 0 << " ";

   for (i=1; i<10; ++i)

   {

       if (fr[i]==1)

       {

           fout << i << " ";

           for (int j=i*10; j<=i*10+9; ++j)

           {

               if (fr[j]==1) { fout << j << " "; fr[j]=0;}

           }

       }

       else

       {

           for (int j=i*10; j<=i*10+9; ++j)

           {

               if (fr[j]==1) { fout << j << " "; fr[j]=0;}

           }

       }

   }

}

Explicație:

pentru a evita repetarea folosesc un vector caracteristic unde pun 1 la apariţia unui nou element in vector. otodată ân vectorul a punem termenii curenţi ai şirului generat în ordinea lor de apariţie (asta e necesar pentru punctul a), iar pentru punctul b) avem nevoie să scriem în fişier şirul ordonat după primele cifre. Aici e benefic vectorul caracteristic fr[ ]

Dacă apar ântrebări, răspundem... Succese! Parcă s-au terminat orele, adică s-a finisat anul şcolar? sau nu?

Alte întrebări interesante