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

Cerința Se dau n numere întregi. Să se insereze între oricare două numere de aceeași paritate media lor aritmetică. Algoritmul se va relua în mod repetat până când nu se mai poate adăuga șirului niciun nou element. Date de intrare Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații. Date de ieșire Programul va afișa pe ecran pe câte o linie nouă, începând cu șirul inițial, toate șirurile distincte ce se pot construi prin metoda mai sus menționată. Fiecare șir se va scrie pe câte un rând nou. Restricții și precizări în cazul în care șirul conține două elemente consecutive egale, între acestea nu se va insera media aritmetică 1 ≤ n ≤ 100 -1.000.000.000 ≤ elementele șirului ≤ 1.000.000.000 Exemplu Intrare 6 1 41 3 3 4 8 Ieșire 1 41 3 3 4 8 1 21 41 22 3 3 4 6 8 1 11 21 31 41 22 3 3 4 5 6 7 8 1 6 11 16 21 26 31 36 41 22 3 3 4 5 6 7 8 Explicație Primul șir este șirul inițial, din primul șir se obține următorul, de pe linia a doua, apoi șirul al treilea și în final șirul al patrulea. În al patrulea șir nu mai putem insera niciun element nou.
Solutia mea da doar 80 de puncte(1336 pbinfo)
Ma poate ajuta cineva?
#include

using namespace std;
long long n,a[100001],nr = 1,i,cnt = 1;
long long v[100001];
int main()
{

cin >> n;
for (i = 1; i <= n; i ++)
{
cin >> a[i];
cout << a[i] << ' ';
}
cout << '\n';
while(cnt)
{
cnt = 0;
for(i = 1; i <= n; i ++)
{
if((a[i - 1] % 2 == a[i] % 2) && (a[i - 1] != a[i]) && (i >= 2))
{
if ((a[i - 1] + a[i]) / 2 != 0)
{
v[nr] = (a[i - 1] + a[i]) / 2;
nr ++;
cnt = 1;
}
}
v[nr] = a[i];
nr ++;
}
if (cnt == 0)
break;
for(i = 1; i < nr; i ++)
{
cout << v[i] <<" ";
a[i] = v[i];
}
cout << '\n';
n = nr - 1;
nr = 1;
}
return 0;
}


boiustef: 1336 este Domino Dots ... totusi care e?
boiustef: am gasit-o, este 1366...

Răspunsuri la întrebare

Răspuns de boiustef
4

#include <iostream>

using namespace std;

int a[100001];

int main()

{

   long long int n, i, j, ok=1;

   cin >> n;

   for (i=1; i<=n; ++i) cin >> a[i];

   while (ok)

   {

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

           cout << a[i] << " ";

       cout << "\n";

       ok=0;

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

       if ((a[i]+a[i+1])%2==0 && a[i]!=a[i+1])

      {

       ++n; for (j=n; j>i+1; --j) a[j]=a[j-1];

       a[i+1]=(a[i]+a[i+1])/2; ++i; ++ok;

      }

   }

   return 0;

}

Alte întrebări interesante