Skip to content
Snippets Groups Projects
Commit ed1780b9 authored by Brayan Santiago Amorocho Lizcano's avatar Brayan Santiago Amorocho Lizcano
Browse files

Últimos ejercicios

parent ce8dff8e
No related branches found
No related tags found
No related merge requests found
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
//Ingresamos la cantidad de veces que se va a repetir el programa
int n;
cout << "Ingrese la cantidad de números a procesar: ";
cin >> n;
for (int caso = 0; caso<n; caso++){ //El nombre de la variable a permutar es "caso" pq vamos a usar la variable i más adelante
int numero, n;
cout << "Ingrese el número: ";
cin >> numero;
/*
La idea es descomponer en factores primos:
Una vez tengamos los factores primos de un número (Por ejemplo, 60 = 2² * 3 * 5), es posible encontrar el número a multiplicar
Pues nosotros querremos (2*3*5)², en este caso habría que multiplicar por 3*5, es decir, 15
Otro ejemplo, 12 = 2²*3, hay que multiplicar por 3, tal como nos dicen en el ejemplo.
*/
n = numero; //Creamos otra variable para la descomposición
vector <int> factores_primos;
for (int i = 2; n > 1 ; i++) {//Empezamos la descomposición
while(n%i == 0){
factores_primos.push_back(i);
n = n/i;
}
}
//Ahora revisamos las duplicidades en los factores primos
int contador =0;
vector <int> mult;
for (int i=0; i < factores_primos.size(); i++){
for (int j=0; j<factores_primos.size(); j++){
if(factores_primos[i] == factores_primos[j]){
contador ++;
// Este pedazo se encarga de aquellos números que solo tienen un factor primo (ej. 2048)
if (i == factores_primos.size() -1 and mult.size() == 0){
// dupl.push_back(factores_primos.size());
if(contador %2 != 0){
//Si hay potencia par, no hay que multiplicar por dicho número, pero si no, hay que multiplicar por este.
mult.push_back(factores_primos[i]);
}
}
}
else{
if (factores_primos[i] != factores_primos[i+1]){
// dupl.push_back(contador); //Acá encontramos un vector que guarde las duplicidades.
if(contador %2 != 0 or contador == 0){
//Si hay potencia par, no hay que multiplicar por dicho número, pero si no, hay que multiplicar por este.
mult.push_back(factores_primos[i]);
}
}
contador = 0;
break;
}
}
cout << factores_primos[i] << " ";
}
cout << endl;
// for (int i = 0; i < mult.size(); i++) {
// cout << mult[i] << ' ';
// }
// cout << endl;
// Ahora imprimimos el número
int total = 1;
for (int i =0; i<mult.size(); i++){
total = total*mult[i];
}
cout << "Para el número " << numero << " es necesario multiplicar por " << total << " para tener un cuadrado perfecto: " << total*numero << "."<<endl;
}
}
\ No newline at end of file
File added
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
//Ingresamos la cantidad de veces a repetir el ciclo.
int n;
cout << "Ingrese el número de casos a probar: ";
cin >> n;
for (int caso = 0; caso < n; caso++){
int a, b;
cout << "Ingrese el boleto: ";
cin >> a;
cout << "Ingrese el número ganador: ";
cin >> b;
//Descomponemos en cifras individuales cada boleto
vector <int> boleto1, boleto2;
int cont = 0;
while(a>0){
boleto1.push_back(a%10); //Guadramos cada digito en un elemento de un vector
boleto2.push_back(b%10);
a = a/10;
b = b/10;
cont++;
}
int contador=0;
int limit =7;
//Como los num son de 7 digitos, ponemos un limite de 7,
//iremos eliminando los elementos que hagan match hasta dejar vacío el vector
for (int i=0; i<cont; i++){
for (int k=0; k<limit; k++){
if(boleto1[i] == boleto2[k]){
contador += 1; //Vamos contando las coincidencias, la idea es que sean 7
//Eliminamos el elemento en el boleto 2 para evitar repeticiones
boleto2.erase(boleto2.begin()+k);
limit--;
}
}
}
if (contador == 7){
cout << "Felicidades, ha ganado el juego."<<endl;
}
else if (contador != 7){
cout << "Ha perdido, mejor suerte para la próxima!"<<endl;
}
}
}
\ No newline at end of file
File added
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
//Número de repeticiones:
int n;
cout << "Ingrese el número de casos a probar: ";
cin >> n;
for (int caso = 0; caso<n; caso++){
int numero;
cout << "Ingrese un número: ";
cin >> numero;
//Guargamos cada dígito en un vector:
vector <int> digitos;
int cont = 0;
int num_temp = numero;
while(num_temp>0){
digitos.push_back(num_temp%10);
num_temp = num_temp/10;
cont++;
}
if(digitos.size()%2 != 0){
cout << "El número debe tener una cantidad par de digitos.";
break;
}
//Lo partimos a la mitad
// std::vector<int>::iterator middleItr(digitos.begin() + digitos.size() / 2);
// for (auto it = digitos.begin(); it != digitos.end(); ++it)
// {
// if (std::distance(it, middleItr) > 0) {
// colmillo2.push_back(*it);
// }
// else {
// colmillo1.push_back(*it);
// }
// }
// Hay n! posibles combinaciones de dígitos, tenemos que hacerlas para encontrar un número vampiro:
//Ordenamos los vectores para usar la función next_permutation
// std::sort(colmillo1.begin(), colmillo1.end());
// std::sort(colmillo2.begin(), colmillo2.end());
// int prueba = 0;
// do {
// do // Ya estamos permutando, unimos los elementos en un solo número y multiplicamos
// {
// int num1=0, num2=0;
// for(int i=0; i<colmillo1.size(); i++){
// num1 = 10*num1 + colmillo1[i];
// num2 = 10*num2 + colmillo2[i];
// }
// cout << numero << " , " << num1 << " , " << num2 << endl;
// if (num1*num2 == numero){
// cout << "El número " << numero << " es un número vampiro con raíces " << num1 << " y " << num2 <<"." << endl;
// prueba ++;
// }
// } while (std::next_permutation(colmillo2.begin(), colmillo2.end()));
// } while (std::next_permutation(colmillo1.begin(), colmillo1.end()));
// cout << "El número " << numero << " no es un número vampiro."<<endl;
std::sort(digitos.begin(), digitos.end());
int prueba = 0;
do
{
// Partimos la permutación a la mitad
vector <int> colmillo1, colmillo2;
std::vector<int>::iterator middleItr(digitos.begin() + digitos.size() / 2);
for (auto it = digitos.begin(); it != digitos.end(); ++it)
{
if (std::distance(it, middleItr) > 0) {
colmillo2.push_back(*it);
}
else {
colmillo1.push_back(*it);
}
}
int num1=0, num2=0;
for(int i=0; i<colmillo1.size(); i++){
num1 = 10*num1 + colmillo1[i];
num2 = 10*num2 + colmillo2[i];
}
if (num1*num2 == numero){
cout << "El número " << numero << " es un número vampiro con raíces " << num1 << " y " << num2 <<"." << endl;
prueba ++;
break;
}
} while (std::next_permutation(digitos.begin(), digitos.end()));
if (prueba == 0) {
cout << "El número " << numero << " no es un número vampiro."<<endl;
}
}
}
\ No newline at end of file
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment