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

#2661 eliminareciframijloc

Cerința
Se dă un număr natural n despre care știm că are număr impar de cifre. Să se afișeze valoarea obținută prin eliminarea cifrei din mijloc.

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

Date de ieșire
Programul va afișa pe ecran numărul valoarea cerută.

Restricții și precizări
100 ≤ n ≤ 10000000000000000
se garantează că n are număr impar de cifre



Exemplu
Intrare

257
Ieșire

27

#include
using namespace std;
long long int n,nr,nr1,x,t,Nr=0;
int oglindit(long long int x)
{
int ogl=0;
while(x!=0)
{
ogl=ogl*10+x%10;
x=x/10;
}
return ogl;
}
int main()
{
cin>>n;
nr=0;
x=n;
while(x!=0)
{
nr++;
x=x/10;
}
nr1=0;
while(n!=0)
{
t=n%10;
nr1++;
if(nr1!=(nr/2)+1)
{
Nr=Nr*10+t;
}
n=n/10;
}
cout< }
acest algoritm da 80%


boiustef: pt ce oglindit ???
boiustef: cand postezi cod aici semnele < desparte de vecini cu spatiu... altfel iti trunchiaza codul

Răspunsuri la întrebare

Răspuns de boiustef
4

#include <iostream>

using namespace std;

long long int n, m, nrcif, z=1, primajum, douajum;

int main()

{

   cin >> n;

   m=n;

   while (m>9)

   {

       ++nrcif; m/=10;

       z*=10;

   }

   int k=nrcif/2;

   for (m=1; m<=k; ++m) z/=10;

   douajum=n%z;

   primajum=n/(z*10);

   m=primajum*z+douajum;

   cout << m;

}



boiustef: cred va place ideea ...
boiustef: poate nu e cu mult mai complcata decat cea oficiala... :)))
boiustef: timpul a durat 0s la toate testele cu limita de 0.1s
Razzvy: Smechera asta! M-am mai gandit la o chestie. Atunci cand treci prin cifrele lui m, cand z este mai mare decat m, inseamna ca are cu o cifra mai mult decat acesta, deci ai trecut de jumatate si ai eliminat si cifra din mijloc si ai putea sa te opresti cand z > m. Totusi, nu stiu ce se intampla in cazul z = m.
boiustef: merita analiza ideea asta ...
boiustef: s-ar putea memora nr de cifre a lui z, si de aici de mers... memorizand permanent ultima cifra eliminata ...
boiustef: razzvy, am cercetat ideea ta, cu compararea lui m si z si s-a primit ok...
cin >> n;
m=n;
while (m >= z)
{
m/=10;
z*=10;
}
primajum=m;
z/=10;
douajum=n%z;
cout << primajum*z+douajum;
Alte întrebări interesante