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.