Test Cifre

From Algopedia
Jump to navigationJump to search

Test

Cifrek

#include <iostream>
using namespace std;
int main() {
    int n, k, c;
    cin >> k;               // citim valoarea cifrei k
    c = 0;                  // c retine cate cifre k vom gasi in numerele citite
    cin >> n;               // citim primul numar din sir
    while( n != 0 ) {       // cata vreme numarul citit n este nenul
      if( n % 2 == 0 )      // daca numarul este par
        while( n > 0 ) {    // cata vreme avem cifre in n
          if( k == n % 10 ) // daca ultima cifra a lui n este k
            c ++;           // crestem contorul cu 1
          n = n / 10;       // scoatem ultima cifra din n
        }
      cin >> n;             // citim urmatorul numar din sir
    }
    cout << c;              // afisam contorul
    return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, k, c;
    scanf( "%d", &k );
    c = 0;
    scanf( "%d", &n );
    while( n > 0 ) {
      if( n % 2 == 0 ) 
        while( n > 0 ) {
          if( k == n % 10 )
            c ++;
          n = n / 10;
        }
      scanf( "%d", &n );
    }
    printf( "%d", c );
    return 0;
}

Eliminare Cifre

#include <iostream>
using namespace std;

int main() {
  int n, i, nr, sum, nou, ucif, p;
  cin >> n;                          // citim n ( numarul de numere din sir
  sum = 0;                           // suma numerelor din sir, dupa eliminarea aparitiilor ultimei cifre
  i = 0;                             // i reprezinta aici pozitia fiecarui numar citit ( numerotam numerele pornind de la 0, ultima pozitie va fi n-1
  while ( i < n ){                   // cata vreme am citit mai putin de n numere
    cin >> nr;                       // citim numarul din sir de pe pozitia i
    ucif = nr % 10;                  // salvam in ucif ultima cifra a lui nr
    
    nou = 0;                          // construim un nou numar ce contine cifrele diferite de ultima cifra
    p = 1;                            // avem nevoie de o putere a lui 10, initial 1
    while ( nr > 0 ){                 // cata vreme am cifre in numar
      if ( nr % 10 != ucif ){         // daca ultima cifra e diferita de ucif
        nou = ( nr % 10 ) * p + nou;  // adaugam cifra la inceputul numarului nou
        p *= 10;                      // crestem puterea
      }
      nr /= 10;                       // scoatem din nr ultima cifra
    }    
    sum += nou;                       // adaugam numarul nou contruit la n    
    i++;                              // trecem la numarul urmator ( cu numarul de ordine i )
  }

  cout << sum ;
  return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main() {
  int n, i, nr, sum, nou, ucif, p;
  scanf( "%d", &n );
  sum = 0;
  i = 0;
  while ( i < n ){
    scanf( "%d", &nr );
    ucif = nr % 10;
    nr /= 10;
    nou = 0;
    p = 1;
    while ( nr > 0 ){
      if ( nr % 10 != ucif ){
        nou = nou + p * ( nr % 10 );
        p *= 10;
      }
      nr /= 10;
    }
    sum += nou;
  i++;
  }
  printf( "%d", sum );
  return 0;
}

suma_prefixe

#include <iostream>

using namespace std;

int main(){
  long long int n, s = 0;
  cin >> n;
  while( n > 0 ){
    s = s + n;
    n = n / 10;
  }
  cout << s;
  return 0;
}

cifra1

Vom elimina pe rand cate o cifra, prima data ultima cifra, apoi penultima, in final prima cifra. Vom imparti numarul in 2. Prima parte a numarului contine si cifra de eliminat, a doua parte contine restul cifrelor de dupa cifra de eliminat. Vom construi un nou numar alipind cele doua parti dupa ce eliminam din prima parte ultima cifra.

#include <iostream>

using namespace std;
int main(){
    int n, max, nr, p;
    cin >> n;
    p = 1;
    max = 0;
    while( p <= n ){
      nr = n / ( p * 10 ) * p + n % p; 
      if( nr > max )
        max = nr;
      p = p * 10;
    }
    cout << max;
    return 0;
}
#include <stdio.h>

int main(){
    int n, max, nr, p;
    scanf( "%d", &n );
    p = 1;
    max = 0;
    while( p <= n ){
      nr = n / ( p * 10 ) * p + n % p; 
      if( nr > max )
        max = nr;
      p = p * 10;
    }
    printf( "%d", max );
    return 0;
}

Schimb_cif

#include <iostream>

using namespace std;

int main(){
  long long n, i, x, uc, p, inv;
  cin >> n;
  i = 1;
  while ( i <= n ){
    cin >> x;           // citim al i-lea numar
    uc = x % 10;        // pastram ultima cifra
    x = x / 10;         // taiem ultima cifra din numar
    inv = 0;            // determinam inversului numarului ramas, nu includem si prima cifra 
    p = 1;              // p va avea atatea 0 -uri, cate cifre are mijlocul lui x
    while ( x > 9 ){    // cata vreme x are mai mult de o cifra
      inv = inv * 10 + x % 10;  // adaugam cifra la invers
      x = x / 10;               // taiem cifra din x
      p = p * 10;               // adaugam un 0 la puterea lui p
    }
    x = ( x * p + inv ) * 10 + uc;   // recompunem numarul alipind prima cifra ramasa in x, inv si ultima cifra
    cout << x << " ";
    i ++;
  }
  return 0;
}