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

Cerința
Fie un număr n natural nenul, determinați un număr k și o combinație de semne + sau -(mai exact o succesiune x1,x2,…,xk unde xi∈{−1,1}, astfel încat să aibă loc relația: n=x1⋅12+x2⋅22+…+xk⋅k2. Să se afișeze o succesiune de k semne + sau - care să îndeplinească relația de mai sus.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieșire
Programul va afișa pe ecran o succesiune de k semne + sau - care să îndeplinească relația.

Restricții și precizări
1 ≤ n ≤ 100
Exemplu 1:
Intrare

3
Ieșire

-+--+
Exemplu 2:
Intrare

2
Ieșire

---+


gstance: poate cineva sa imi ataseze solutia oficiala la aceasta problema

Răspunsuri la întrebare

Răspuns de filipasvlad
1

#include <iostream>

using namespace std;

int gen(int k,int l){

int s = 0;

for(int i = 1; i <= l; i++){

 s += ((k&1) == 1 ? 1 : -1)*i*i;

 k>>=1;

}

return s;

}

void writebin(int x, int l){

  for(int i = 1; i <= l; i++){

 cout << ((x&1) ? '+' : '-');

      x>>=1;

  }

}

int main(){

int n;

  cin >> n;

  int s;

  bool f = false;

  for(int j = 1; j <= 15; j++){

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

          s = gen(k, j);

          if(s==n){

              f = true;

          writebin(k,j);break;}

      }

      if(f)break;

  }

}

bafta fratelo :)


pmarian98: #include
using namespace std;

int main()
{
int n;
cin>>n;
switch(n%4)
{
case 1: cout<<"+"; break;
case 2: cout<<"---+"; break;
case 3: cout<<"-+--+";
}
for(int i=0;i cout<<"+--+";
return 0;
}
Alte întrebări interesante