👤

PROBLEMA 2621 de pe pbifo. Va multumesc

Un număr natural M se numește număr spower2 dacă poate fi descompus astfel: M=2x+2y, cu x≠y. Exemplu: 6 este un număr spower2 (6=2+4), pe când 8 nu este.

Cerința
Se consideră un șir A de n numere naturale. Pentru fiecare element al șirului Ai să se determine cel mai apropiat număr spower2 mai mare sau egal cu Ai, unde 1≤i≤n.

Date de intrare
Fișierul de intrare spower2.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire
Fișierul de ieșire spower2.out va conține pe prima linie n numere naturale, separate prin spațiu, ce reprezintă numerele spower2 asociate numerelor citite din fișier conform cerinței.

Restricții și precizări
1 ≤ n ≤ 100 000
numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000.000



Exemplu
spower2.in

6
14 8 5 19 1 6
spower2.out

17 9 5 20 3 6
Explicație
17=1+16, 9=1+8, 5=1+4, 20=4+16, 3=1+2, 6=2+4.


Răspuns :

Răspuns:

#include <iostream>

#include <bits/stdc++.h>

#include <fstream>

using namespace std;

ifstream f("spower2.in");

ofstream g("spower2.out");

int Puteri[35], k;

int Create[35*35], nr, n, m;

int main ()

{

   f >> n;

  for(int i = 0; i <= 30; i++)

  {

      Puteri[i + 1] = pow(2,i);

      m += 1;

  }

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

      {

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

          {

              Create[++k] = Puteri[i] + Puteri[j];

          }

      }

      sort(Create + 1, Create + 1 + k);

  int st , dr;

  for(int i = 1; i <= n; i++)

  {

      f >> nr;

      if(nr == 2 || nr == 1 || nr == 0) {

            g << 3 <<" ";

            continue;

         }

      for(int j = 1; j <= k; j++)

       {

         if(nr >= Create[j] && nr <= Create[j + 1])

         {

           if(nr == Create[j + 1] || nr == Create[j])

               g << nr <<" ";

           else g << Create[j + 1] <<" ";

             break;

         }

       }

  }

 return 0;

}

Explicație:

Am calculat dinainte puterile si elementele din puterea perechii i , j apoi am cautat limitele stanga si dreapta unde se afla elementul si am afisat limita din dreapta, adica cea care e mai mare ;)

Aici ai codul facut pe un site de pe care poti copia codul fara erori, de obicei brainly are erori cand copiezi codul - https://pastebin.com/7PUpHYkK.

Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!


ID Learners: Alte intrebari