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

Avance ejercicios

parent 63b41397
No related branches found
No related tags found
No related merge requests found
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
int main() {
int n=1;
vector <int> digitos;
while ( n != 0){ //Ingresamos los números hasta que el usuario escriba "0", indicando que ya no va a ingresar más números.
cout << "Ingrese un número: ";
cin >> n;
digitos.push_back(int(n));
}
for (int count=0; count <digitos.size()-1; count++){//Bucle para que repita el proceso para cada numero de digitos
vector <int> reversible;
//Creamos un vector con n numeros
string sum = "1";
for (int j=0; j < digitos[count]-1 ; j++){
sum = sum + "0";
}
//cout << sum << endl;
for(int j=stoi(sum); j< pow(10,digitos[count]) ; j++){
if (j%10 > 0){ // Eliminamos los números que terminan en 0
//Separamos cada número en dígitos:
int cifras[digitos[count]], cifras2[digitos[count]];
int k = 0;
int temp = j;
//cout << "Var_temp" << temp << endl;
while(temp>0){ // Descomponemos cada número en sus dígitos.
cifras[k] = temp%10;
//cout << "Cifra guardada" << cifras[k] << endl;
temp = temp/10;
k++;
}
// Creamos el número inverso
string number, inverse;
for (int i = 0; i < k; i++) {
inverse = inverse + to_string(cifras[i]);
}
for (int i = k-1; i >= 0; i--) {
number = number + to_string(cifras[i]);
}
int result = stoi(number) + stoi(inverse);
// Comprobamos que su suma tenga digitos impares
int temp2 = result;
k=0;
int contador = 0;
while(temp2>0){
cifras2[k] = temp2%10;
temp2 = temp2/10;
k++; //Acá descomponemos la suma en sus dígitos para mirar si son impares o no
}
for (int i= 0; i<k; i++){
float imp;
if (cifras2[i]%2 == 0){
contador += 1; //Creamos una "alerta" cada vez que veamos un número par
}
}
if(contador == 0){ //Si es 0, todos los dígitos son impares
reversible.push_back(j);
}
}
}
cout << "Existen " << reversible.size() << " números reversibles de " << digitos[count] << " cifras." <<endl;
}
}
\ No newline at end of file
File added
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
// Preguntamos cuántos sudokus queremos evaluar
int n, contador;
cout << "¿Cuántos sudokus se van a evaluar? " ;
cin >> n;
contador = 0;
srand(time(0));
while (contador < n){
// Ingresamos los valores del sudoku, para no estar digitando, crearé una lista aleatoria c:
int sudoku[9][9];
for(int i=0; i < 9; i++ ){
for (int j=0; j<9; j++){
sudoku[i][j] = rand()%20+1;
cout << sudoku[i][j] << " ";
if (j==2 or j==5){
cout << "| ";
}
}
cout << endl;
if (i==2 or i==5){
cout << "--------------------"<< endl;
}
}
// // Ahora revisamos repeticiones en filas o columnas.
// for(int i=0; i < 9; i++ ){
// for (int j=1; j<9; j++){
// if(sudoku[i][j-1] == sudoku[i][j]){
// cout << "El sudoku tiene una repetición en las casillas [" << i+1 << "," << j << "]" << " y [" << i+1 << "," << j+1 << "]." << endl;
// //break;
// }
// }
// for (int k=1; k<9; k++){
// if(sudoku[k-1][i] == sudoku[k][i]){
// cout << "El sudoku tiene una repetición en las casillas [" << k << "," << i+1 << "]" << " y [" << k+1 << "," << i+1 << "]." << endl;
// //break;
// }
// }
// }
// Revisamos repeticiones por bloques:
// Hay "cambio" de bloque cada 3 filas o columnas, entonces podemos simplificar todos los 9 en un solo bucle:
vector <int> linea1, linea2, linea3; // Ya revisamos antes si había repetición en la misma fila
for(int m = 1; m < 4; m++){ //Nos moveremos por los tres bloques
for(int n = 1; n < 4; n++){
for(int i=3*(n-1); i<3*n ; i++){
linea1.push_back(sudoku[3*(m-1)][i]);
linea2.push_back(sudoku[3*(m-1)+1][i]);
linea3.push_back(sudoku[3*(m-1)+2][i]); //Creamos 3 lineas (para más fácil acceso a los datos) y las comparamos:
}
for(int j=0; j<3; j++){
for(int k=0; k<3; k++){
if(linea1[j] == linea2[k] or linea1[j] == linea3[k] or linea2[j] == linea3[k]){
cout << "El sudoku tiene una repetición en un bloque." << endl;
//break;
}}
}
linea1.clear();
linea2.clear();
linea3.clear();
}
}
contador++;
}
}
\ No newline at end of file
File added
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
int n=1;
vector <int> numeros;
while ( n != 0){ //Ingresamos los números hasta que el usuario escriba "0", indicando que ya no va a ingresar más números.
cout << "Ingrese un número: ";
cin >> n;
numeros.push_back(int(n));
}
for (int i=0; i<numeros.size()-1 ; i++){ //Iniciamos un blucle para que repita el procedimiento para cada número indicado.
//cout << numeros[i] << endl;
int suma = 0;
int num_prueba = 9; //Empezaremos comprobando con el 9 y a medida que vayamos bajando, se irá formando el número
vector <int> minimo;
while (suma != numeros[i] and num_prueba > 0){
int suma_temp = suma + num_prueba; //Suma temporal para hacer la comparacion
//Si la sum_temp es mayor, el numero de prueba no nos sirve y hay que restarle,
//si es menor, sirve y lo añadimos al vector que usaremos para indicar el menor numero
if(suma_temp > numeros[i]){
num_prueba = num_prueba - 1;
}
else if(suma_temp <= numeros[i]){
minimo.push_back(num_prueba);
suma += num_prueba;
//cout << "Funcionó para el " << num_prueba << " suma " << suma <<endl;
}
}
// Una vez obtenido el vector procedemos a ordenarlo
for (int k=0; k<minimo.size(); k++){
for(int j=k+1; j<minimo.size(); j++){
if (minimo[k] > minimo[j]){
int temp = minimo[j];
minimo[j] = minimo[k];
minimo[k] = temp;
}
}
}
cout << "El número mínimo cuya suma de dígitos da " << numeros[i] << " es: ";
for(int k = 0; k < minimo.size(); k++)
{
cout << minimo[k];
}
cout << 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