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;
}