Skip to content
Snippets Groups Projects
Commit ce8dff8e authored by Brayan Santiago Amorocho Lizcano's avatar Brayan Santiago Amorocho Lizcano
Browse files
parents e7f76304 509d0fbe
No related branches found
No related tags found
No related merge requests found
#include <iostream> #include <iostream>
#include <cmath> #include <cmath>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std; using namespace std;
int main() int main()
{ {
cout << "Bienvenido al verificador de Sudokus Correctos" << 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);
}
// Leemos el primer valor como el número de casos a evaluar
int n;
getline(input,linea);
n = stoi(linea);
// Creamos un vector para alojar los sudokus que se hayan ingresado
vector <vector <int>> sudokus(n);
int cont = 0, cont2 = 0; // Un contador es para los casos, el otro para las filas que van ingresando en cada caso
while (getline(input, linea))
{
stringstream fila(linea);
string token;
while(getline(fila, token, ' '))
{
sudokus[cont].push_back(stoi(token)); // Guadamos todo el sudoku en una sola fila para luego acceder de la forma (m*i+j)
}
cont2++;
if (cont2 == 9) // Cuando entren 9 filas del sudoku, continuamos a la siguiente del vector
{
cont2 = 0;
cont++;
}
}
// (opcional) Imprmimos el sudoku que queramos ver
cout << "Se ingresó el sudoku:" << endl;
for (int i=0; i<9;i++)
{
for (int j=0; j<9; j++)
{
cout << sudokus[0][9*i+j] << " ";
if (j==8) cout << endl;
}
}
// Para cada sudoku, dividimos en regiones, filas y columnas para comparar entre ellos
string respuestas[n];
for (int i=0; i<n; i++)
{
int regiones[9][9], filas[9][9], columnas[9][9];
for (int n=0; n<9; n++)
{
for (int m=0; m<9; m++)
{
filas[n][m] = sudokus[i][9*n+m];
columnas[n][m] = sudokus[i][9*m+n];
// Con las regiones usamos expresiones distintas. La primera permite saber la region en la que se encuentra la celda,
// la segunda permite saber cual celda dentro de la región se esta seleccionando. Finalente, el sudoku se recorre
// de forma normal
regiones[(n/3)*3+(m/3)][3*(n%3)+(m%3)] = sudokus[i][9*n+m];
}
}
// Ahora comprobamos que no se repitan números en ninguna región, fila o columna. De repetirse en alguna, se imprime "NO".
respuestas[i] = "SI"; // Suponemos que esta bien hasta encontrar un error
for (int n=0; n<9; n++)
{
for (int m=0; m<9; m++)
{
for (int k=m+1; k<9; k++) // Comparamos todas las parejas posibles
{
// Si encuentra coincidencias entre los números, y la respuesta aún no es NO, pone NO; esto para que el mismo
if (regiones[n][m]==regiones[n][k]) respuestas[i] = "NO";
if (filas[n][m]==filas[n][k]) respuestas[i] = "NO";
if (columnas[n][m]==columnas[n][k]) respuestas[i] = "NO";
if (respuestas[i] == "NO"){ k=9; m=9; n=9;} // Si la respuesta ya es no, se rompen todos los ciclos pues ya no son necesario
}
}
}
}
// Finalmente imprimimos las respuestas
cout << "Los resultados para cada sudoku es: " << endl;
cont=1;
for (string v:respuestas)
{
cout << to_string(cont)+". " << v << endl;
cont++;
}
} }
// Gracias por ver :D
\ No newline at end of file
File added
File added
1
4 1 3 8 2 5 6 7 9
5 6 7 1 4 9 8 3 2
2 8 9 7 3 6 1 4 5
1 9 5 4 6 2 7 8 3
7 2 6 9 8 3 5 1 4
3 4 8 5 1 7 2 9 6
8 5 1 6 9 4 3 2 7
9 7 2 3 5 8 4 6 1
6 3 4 2 7 1 9 5 8
\ No newline at end of file
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
// Se genera la lista alleatoriamente sobre la cual se va a ordenar y buscar
int n;
cout << "Ingrese el número de elementos para generar el array: "; cin >> n;
int a[n];
// Utilizamos una semilla distinta en cada ejecución usando el tiempo
srand(time(0));
for (int i = 0; i<n; i++) a[i] = rand() % 100;
// Ordenamos el vector
int temp;
for (int i = 0; i<n; i++)
{
for (int j=i+1; j<n; j++)
{
if (a[i]>a[j])
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
// Imprimimos el vector y preguntamos el valor a buscar
cout << "El vector en el que se busca es:" << endl << "[ ";
for (int i:a) cout << i << " ";
int T;
cout << "]" << endl << "Ingrese el valor entero que se desea buscar en el array: "; cin >> T;
// Iniciamos la busqueda asignando los límites izq y der en el array
int L=0, R=n-1;
// Mientras el limite izq sea menor al der, comparamos el valor en la mitad y verificamos si
// el numero a encontrar esta en el bloque izquierdo o derecho, reseteamos el limite lateral
// necesario y repetimos el proceso
while (L<R)
{
int m = floor((L+R)/2);
if (a[m] < T)
{
L = m+1;
if (a[L]==T)
{
cout << "El número T = " << T << " se encuentra en la posición " << L;
exit(0);
}
} else if (a[m] > T)
{
R = m-1;
if (a[R]==T)
{
cout << "El número T = " << T << " se encuentra en la posición " << R;
exit(0);
}
} else if (a[m] == T)
{
cout << "El número T = " << T << " se encuentra en la posición " << m;
exit(0);
}
}
cout << "El valor T = " << T << " no se encuentra en el vector";
}
File added
#include <iostream>
#include <cmath>
#include <fstream>
#include <vector>
using namespace std;
// Definimos la función para aproximar su integral
double f(double x)
{
return pow(x,2);
}
int main()
{
// Pedimos los límites de integración y el número de particiones
double a, b;
int n;
cout << "Ingrese los límites de integración:" << endl << "a: ";
cin >> a;
cout << "b: ";
cin >> b;
cout << "Ahora ingrese el número de particiones:" << endl << "n: ";
cin >> n;
double dx = (b-a)/n;
// Creamos el vector para alojar las áreas de cada rectángulo
vector <double> areas;
// Ahora iniciamos la sumatoria y calculamos las áreas
for (int i=0; i<n; i++)
{
areas.push_back(f(a+dx*i)*dx);
}
// Imprimimos el valor de la suma
double suma=0;
for (int i=0; i<areas.size(); i++) suma += areas[i];
cout << "El valor de la aproximación a la integral es: " << suma << endl;
// (opcional) Imprimimos el valor de las áreas (pa que sirva de algo el vector)
// cout << "El vector de las áreas es:" << endl;
// cout << '[' << ' ';
// for (double v:areas)
// {
// cout << v << ' ';
// }
// 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