Informatică, întrebare adresată de panteamarius316, 8 ani în urmă


Se citesc două numere naturale zecimale m şi n. Vom considera reprezentările lor în baza doi. Pentru a le aduce la acelaşi număr de cifre în baza doi vom completa numărul mai mic la stînga cu zero. Astfel ambele reprezentări vor avea x cifre în baza doi. O rotaţie a unui număr în baza doi se obţine tăind prima sa cifră şi adăugînd-o la finalul numărului. Putem forma astfel xrotaţii diferite, incluzînd numărul original.
Cerinţă
Calculaţi cîte din rotaţiile reprezentării numărului m în baza doi se suprapun perfect cu reprezentarea în baza doi a numărului n.
Date de intrare
Fişierul de intrare suprapuneri.in va conţine pe prima linie cele două numere m şi n separate printr-un spaţiu.
Date de ieşire
În fişierul de ieşire suprapuneri.out veţi scrie numărul de suprapuneri ale reprezentărilor binare ale celor două numere.
Restricţii
 0 ≤ m, n ≤ 1018
Exemplu
suprapuneri.in suprapuneri.out Eeplicatii
54 27 2 Pentru m = 54 şi n = 27 cele două reprezentări în baza doi vor fi
110110, respectiv 11011. Vom aduce reprezentarea a doua la acelaşi
număr de cifre şi vom avea cele două reprezentări 110110 şi 011011.
Apoi vom efectua rotaţiile şi vom număra cîte egalităţi de reprezentări avem:

110110 ≠ 011011
101101 ≠ 011011
011011 = 011011 egalitate
110110 ≠ 011011
101101 ≠ 011011
011011 = 011011 egalitate

În concluzie vom afişa 2.
Timp maxim de executie/test: 0.2 secunde
Memorie totală: 5MB din care 2MB pentru stivă.
Dimensiunea maximă a sursei 5KB.


va rog ajutati ma ,pls


boiustef: de unde e problema? pe pbinfo nu am găsit-o...
boiustef: am căutat cu numele Suprapuneri
panteamarius316: nu e de pe pbinfo,e de pe infoarena
panteamarius316: daca poti sa imi dai o solutie ,nu am idee sa o fac
boiustef: am făcut. merge pentru datele din enunţ
boiustef: nu ştiu ce va face pe infoarena... :)))
boiustef: ce numar are ca nu am gasit nici acolo.. sau pui numarul problemei sau numele ei

Răspunsuri la întrebare

Răspuns de boiustef
0

Răspuns:

Explicație:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("suprapuneri.in");

ofstream g("suprapuneri.out");

short n,m,i,j,ok,x,c;

short bitm[13], bitn[13];

int main()

{

   f >> m >> n;

   while (m)

   {

       ++i; bitm[i]=m%2;

       m/=2;

   }

   while (n)

   {

       ++j; bitn[j]=n%2;

       n/=2;

   }

   x=max(i,j);

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

   {

       ok=1;

       for (j=1; j<=x; ++j)

       {

           if (bitm[j]!=bitn[j]) { ok=0; break; }

       }

       if (ok) ++c;

       short bit=bitm[1];

       for (int k=1; k<x; ++k) bitm[k]=bitm[k+1];

       bitm[x]=bit;

   }

   g << c;

}


panteamarius316: Mersii mult
boiustef: cu plăcere, succese... dar pentru asta se merită efort
panteamarius316: Da
Alte întrebări interesante