Skip to content
Snippets Groups Projects
Commit f4a1c42a authored by Nicolas Mantilla Molina's avatar Nicolas Mantilla Molina
Browse files

Ejercicio Numeros Reversibles Parcial 2

parent 72feed30
No related branches found
No related tags found
No related merge requests found
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
cout << "Bienvenido al contador de Números Reversibles dependiendo del número de dígitos" << endl;
// Primero leemos el archivo input y verificamos su validez
cout << "Por favor ingrese la dirección del archivo con el input: ";
string nombre, linea;
cin >> nombre; // Utilizar sample.in en este caso
ifstream input;
input.open(nombre);
if (!input)
{
cout << "Archivo inválido." << endl;
exit(0);
}
// Generamos un vector con los valores siempre y cuando sean distintos de 0
vector <int> digitos;
while(getline(input, linea))
{
if (stoi(linea) == 0) break;
digitos.push_back(stoi(linea));
}
// Imprimimos el vector para verificar el input
cout << "Se ingresaron los valores: " << endl;
cout << "[ ";
for (int i:digitos)
{
cout << i << " ";
}
cout << "]" << endl;
// Definimos el vector que contendrá los números que sean reversibles para cada número de dígitos
vector <vector <int>> reversibles(digitos.size());
// Hallamos la cantidad de numeros reversibles existentes por cada cantidad de dígitos
int respuestas[digitos.size()];
for (int i=0; i<digitos.size(); i++)
{
// Iniciamos un for con todos los números posibles con esos dígitos. Por ejemplo, para n=2, los números van desde
// 10^(2-1) hasta 10^2: [10, 100)
for (int num = pow(10, digitos[i]-1); num < pow(10, digitos[i]); num++)
{
// Comprobamos que la cantidad sea inferior a 2^63
if (reversibles[i].size() == pow(2,63))
{
cout << "La cantidad de reversibles ha llegado al valor límite de 2^63 del programa para " << digitos[i] << " dígitos";
break;
}
// Ahora comprobamos si los números terminan en 0 para desecharlos, ya que si terminan en 0, el inverso tendrá
// un dígito menos: 50 tiene un dígito más que 05, así como 130 con 031
if (num%10 == 0) continue;
// Además, verificamos si el número ya se encuentra en el vector de reversibles
bool existencia = false;
for (int l:reversibles[i])
{
if (num == l) existencia = true;
}
if (existencia == true) continue;
// Si no termina en cero y no está en el vector de reversibles, obtenemos el número invertido
int temp = num, invertido = 0;
while(temp>0)
{
invertido = invertido*10 + temp%10; // Vamos corriendo las cifras a la izquierda y agregando la nueva cifra
temp /= 10;
}
// Obtenemos la suma
int suma = num + invertido;
// Verificamos que todas las cifras de la suma sean impares
temp = suma;
bool imparidad = true; // Suponemos que todas son impares hasta que encuentre un par
while (temp>0)
{
int cifra = temp%10;
if (cifra%2 == 0)
{
imparidad = false;
break;
}
temp /= 10;
}
// Ahora, si todas las cifras son impares, se agregan el número y su invertido al vector de reversibles
if (imparidad)
{
reversibles[i].push_back(num);
reversibles[i].push_back(invertido);
}
}
// Luego, contamos la cantidad de reversibles hallados
respuestas[i] = reversibles[i].size();
}
// Finalmente, imprimimos las respuestas
cout << "La cantidad de números reversibles existentes por cantidad de dígitos es:" << endl << "Dígitos : Cantidad" << endl;
for (int i=0; i<digitos.size(); i++)
{
cout << digitos[i] << " : " << respuestas[i] << endl;
}
// for (int i:reversibles[0]) // Por si se quieren ver los números
// {
// cout << i << " ";
// }
}
// Gracias por ver :D
\ No newline at end of file
File added
File added
2
3
0
\ No newline at end of file
# Parcial 2 - Algoritmos y Arquetipos
Ingresar a la página https://www.aceptaelreto.com/
Navegar siguiendo el camino: Problemas -> Por categorías -> Temática -> Números
https://www.aceptaelreto.com/problems/categories.php/?cat=63
Hacer los ejercicios (al menos 6 y uno debe ser el del sudoku):
* Números Vampiro
* ¿Cuántos números reversibles?
* Conseguir un cuadrado perfecto
* El Joker de la Primitiva
* Menor número con la misma suma de dígitos
* Dígitos saltarines
Estos están en una categoría diferente:
* https://www.aceptaelreto.com/problem/statement.php?id=355&cat=64 (*Gregorio XIII*)
* https://www.aceptaelreto.com/problem/statement.php?id=345&cat=65 (*Sudokus Correctos*)
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