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

Se da un sir V cu N elemente, numere naturale nenule. La primul pas, secventa de elemente cuprinse ıntre prima sii ultima valoare cu suma cifrelor maxima (inclusiv acestea) se elimina. Ne imaginam ca toate elementele din dreapta secventei eliminate sunt deplasate la stanga, ajungand in continuarea celor din stanga secvenței eliminate. Reluam pe noul sir operatia descrisa anterior. Procedeul se repeta pana se ajunge la un sir fara elemente.

Determinati numarul de pași necesari pentru a ajunge la șirul vid. Determinati si numarul cel mai marede elemente care s-au eliminat la același pas.

Exemplu:

INTRARE

6

111 19 27 4 55 1

IESIRE

3 4


EXPLICATIE:

La primul pas se elimia secventa 19 27 4 55 iar sirul ramas este 111 1. La al doilea pas se elimina

111(este un singur element cu suma cifrelor maxima), sirul ramas fiind format doar din 1. La al treilea pas se elimina acest element si ajungem la sirul vid. Cele mai multe elemente s-au eliminat la primul pas,respectiv 4 elemente.
!!!Va rog rezolvare pt cls a 6-a!!!


andrei4648: Va rog sa ma ajutati!
andrei4648: Problema pentru clasa a 6-a

Răspunsuri la întrebare

Răspuns de RaresArt
2

Răspuns:

#include <bits/stdc++.h>

using namespace std;

#define pb push_back

#define ll long long

void solve() {

   int n;

   cin >> n;

   int a[n];

   for(int i = 0; i < n; i++) {

       cin >> a[i];

   }

   int cnt = 0;

   int temp = -1;

   while (true) {

   cnt++;

   int maxi = INT_MIN;

   for(int i = 0; i < n; i++) {

       int n = a[i], sum = 0;

       while (n >= 10) {

           sum+=n%10;

           n/=10;

       }

       sum+=n;

       if (sum > maxi) {

           maxi = sum;

       }

   }

   int na = -1, ma = -1;

   bool f = false;

   for(int i = 0; i < n; i++) {

       int n = a[i], sum = 0;

       while (n >= 10) {

           sum+=n%10;

           n/=10;

       }

       sum+=n;

       if (sum == maxi && !f) {

           f = true;

           na = i;

       }

   }

   f = false;

   for(int i = n-1; i >= 0; i--) {

       int n = a[i], sum = 0;

       while (n >= 10) {

           sum+=n%10;

           n/=10;

       }

       sum+=n;

       if (sum == maxi && !f) {

           f = true;

           ma = i;

       }

   }

   int cnt1 = 0;

   for (int i = na; i <= ma; i++) {

       a[i] = -1;

       cnt1++;

   }

   if (temp != -1) {

       if (cnt1 > temp) {

           temp = cnt1;

       }

   } else {

       temp = cnt1;

   }

   bool d = false;

   for (int i = 0; i < n; i++) {

       if (a[i] != -1) {

           d = false;

           break;

       } else {

           d = true;

       }

   }

   if(d) {

       break;

   }

   }

   cout << cnt << " " << temp;

}

int main() {

   solve();

}

Alte întrebări interesante