Tema 1

Responsabili: Cosmin Boacă Florin Avram Călin Cruceru

Termen de predare: To be decided

Obiective Temă

  • să se realizeze un program urmând anumite cerințe
  • să se utilizeze funcţii, pentru a modulariza programul
  • să se respecte formate stricte de intrare/ieşire
  • să se însușească cunoștințele din primele 4 laboratoare

Cunoştinte necesare

  • laboratoarele 1-4
  • matematică elementară

Cerință

Task1. 20p

Florin și-a descoperit de curând pasiunea pentru teoria numerelor. După îndelungi cercetări el a descoperit că există perechi de numere (a, b) cu o proprietate interesantă:

SumDiv(a) = b si SumDiv(b) = a unde

SumDiv(X) = suma divizorilor lui X care sunt mai mici ca X

Fiind foarte încântat de numerele descoperite Florin a vrut să-i arate lui Cosmin o listă cu toate perechile de numere mai mici decât K . Totuși, Florin nu a fost atent și a pierdut lista cu numerele iar acum voi va trebui să-l ajutați să o refacă. În schimbul ajutorului vostru Florin o să vă răsplătească oferindu-vă 20 de puncte din tema la PC.

Input

Pe prima linie se va regăsi numărul K.

K
Output:

Pe prima linie se va găsi numărul N de perechi de forma (a, b) care resepctă proprietatea descrisă mai sus Pe următoarele N linii se vor regăsi perechile (ai, bi), ai < bi sortate în ordinea crescătoare a numărului ai, iar în caz de egalitate în ordinea crescătoare a numărului bi

N
(a0, b0)
(a1, b1)
(a2, b2)
.
.
.
(aN, bN)

Task2. 20p

După recuperarea perechilor de numere pierdute Cosmin și Florin își pun tot mai multe întrebări legate de numere. Printre acestea se numără și următoarea întrebare:

Câte palindroame mai mici decât X se pot scrie ca produs de 2 numere de P cifre ?

Un palindrom este un număr care se citește la fel și de la stânga la dreapta și de la dreapta la stânga, de exemplu 121, 2222, 2442

Input

Pe prima linie se vor găsi numerele P, X.

P X
Output

Numărul de numere mai mici ca X care sunt palindroame și se pot scrie ca produs de 2 numere de P cifre.

Restricții

0 < X < 2 ^ 63

0 < P < 4

Task3. 40p

Cosmin si Florin au descoperit un nou joc. Ei au un teren de luptă de 8×8 codificat sub forma unui număr pe 64 de biți (unsigned long long). Pe terenul de luptă se află soldați (codificați cu bit-ul 1) și celule libere (codificate cu bit-ul 0) .

7 = 0000000000000000000000000000000000000000000000000000000000000111

Codifică harta următoare

Hartă pentru valoarea 7
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1

Cosmin și Florin mută alternativ câte un soldat dintr-o celulă a hărții intr-o altă celulă a hărții. Dacă un soldat este mutat într-o celulă în care se află alt soldat se vor lupta intre ei, iar ambii vor dispărea de pe teren. Mutările făcute sunt codificate sub forma unui număr întreg astfel:

  1. primii 6 biți reprezintă pozitia curentă a unui soldat pe hartă: (primii 3 biți reprezintă coloana, iar următorii 3 biți reprezintă linia).
  2. următorii 6 biti reprezintă pozitia în care soldatul se va teleporta pe harta: (primii 3 biți reprezintă coloana, iar următorii 3 biți reprezintă linia)

Numărul 2655 (baza 10) = 101001011111 (baza 2) reprezinta o codificarea a următoarei mutări pe hartă:

poziția curentă: (011, 111) (3, 7)

poziția în care soldatul va fi mutat (101, 001) (5, 1)

Fiind dată o hartă inițiala și o lista de mutări codificate ca în exemplul anterior Cosmin și Florin vă roagă să afișați configurația finală a hărții sub forma unui număr pe 64 de biți. Ei vă vor recompensa cu 40 de puncte dacă reușiți să afișați configurația finală corect.

Input

Pe prima linie se va găsi un număr pe 64 de biți reprezentând configurația inițială a hărții.

Pe următoarea linie se va afla un număr N, reprezentând numărul de mutări făcute de soldați.

Pe următoarele N linii se vor afla numere întregi reprezentând codificările mutărilor.

ConfigurațieHartă
N
mutare1
mutare2
.
.
.
mutareN
Output

Configurația finală a jocului după ce au fost aplicate cele N mutări.

ConfigurațieFinală
Precizări

  1. Dacă pe poziția curentă nu se află un soldat (bit-ul corespunzător este 0) mutarea nu se va aplica
  2. Dacă pe poziția unde va fi mutat un soldat există un alt soldat ambii vor dispărea de pe hartă
  3. Folosiți tipuri de date unsigned pentru variabilele pe care faceți operații pe biți in special pentru configurația hărții
  4. Numărul afisat în fișierul de ieșire TREBUIE să fie un număr positiv

Exemplu

Input:

7
4
3647 (muta de la (7,7) la (7,0))
3710 (muta de la (7,6) la (7,1))
3641 (muta de la (7,1) la (7,0))
1133 (muta de la (5,5) la (2,1))

Output:

4

Explicație

Trimitere temă

Tema va fi trimisă folosind vmchecker

După cum probabil ați observat task-urile au un total de 80p. Celelalte 20p se vor acorda pentru coding style.

Formatul arhivei va fi următorul:

  1. 3 fișiere .c, câte unul pentru fiecare task
  2. Un fișier Makefile / makefile care să conțină următoarele reguli:
    1. build-tX: crează executabilul aferent task-ului X, X ia valori din {1, 2, 3}
    2. run-tX: rulează executabilul aferent task-ului X, X ia valori din {1, 2, 3}
  3. Un fișier README în care descrieți ideea voastră pentru fiecare dintre task-uri

Arhiva trebuie să fie de tipul zip.

Lipsa fișierului README se depunctează cu 10p.

Inputul pentru TOATE task-urile va fi citit de la stdin (tastatura) iar output-ul va fi afișat la stdout (ecran).

Dacă nu rezolvați un anumit task regulile build-tX / run-tX corespunzătoare task-ului respectiv trebuie să apară in Makefile, chiar dacă ele nu vor face nimic.

programare/tema1_cbcd_2015_2016.txt · Last modified: 2015/10/26 17:50 by cosmin.boaca
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0