Autor
|
Tema: RETOS C++ (Leído 56,134 veces)
|
Stakewinner00
|
#include <iostream> using namespace std; int main () { int a,b,c,d; cin >> a >> b >> c >> d; if ((a= a>b ? a:b)>(c= c>d ? c:d)) cout << a << endl; else cout << c << endl; }
esta forma de estructurar el if nunca lo havia visto y a decir verdad solo entiendo la mitad. Si me puedes explicar el ? y el a:b. que és lo que no entendi.
|
|
|
En línea
|
|
|
|
overxfl0w13
|
esta forma de estructurar el if nunca lo havia visto y a decir verdad solo entiendo la mitad.
Si me puedes explicar el ? y el a:b. que és lo que no entendi.
Operadores ternarios busca documentación sobre ellos son bastante útiles. EI: juntando mensajes.RETO 12: #include <iostream> #include <fstream> using namespace std; int numeroSudoku[100]; bool compruebaVertical(); bool compruebaCuadros(); bool compruebaHorizontal(); int main(int argc,char* argv) { ifstream archivo("sudoku.txt"); for(int x=0;x<=80 && archivo.eof() == false;x++) { archivo >> numeroSudoku[x]; } if(compruebaVertical() && compruebaHorizontal() && compruebaHorizontal()) { cout << "Sudoku Valido" << endl; } else { cout << "Sudoku Invalido" << endl; } return 0; } bool compruebaVertical() { if(numeroSudoku[0] + numeroSudoku[9] + numeroSudoku[18] + numeroSudoku[27] + numeroSudoku[36] + numeroSudoku[45] + numeroSudoku[54] + numeroSudoku[63] + numeroSudoku[72] == 45 ) { if(numeroSudoku[1] + numeroSudoku[10] + numeroSudoku[19] + numeroSudoku[28] + numeroSudoku[37] + numeroSudoku[46] + numeroSudoku[55] + numeroSudoku[64] + numeroSudoku[73] == 45 ) { if(numeroSudoku[2] + numeroSudoku[11] + numeroSudoku[20] + numeroSudoku[29] + numeroSudoku[38] + numeroSudoku[47] + numeroSudoku[56] + numeroSudoku[65] + numeroSudoku[74] == 45 ) { if(numeroSudoku[3] + numeroSudoku[12] + numeroSudoku[21] + numeroSudoku[30] + numeroSudoku[39] + numeroSudoku[48] + numeroSudoku[57] + numeroSudoku[66] + numeroSudoku[75] == 45 ) { if(numeroSudoku[4] + numeroSudoku[13] + numeroSudoku[22] + numeroSudoku[31] + numeroSudoku[40] + numeroSudoku[49] + numeroSudoku[58] + numeroSudoku[67] + numeroSudoku[76] == 45 ) { if(numeroSudoku[5] + numeroSudoku[14] + numeroSudoku[23] + numeroSudoku[32] + numeroSudoku[41] + numeroSudoku[50] + numeroSudoku[59] + numeroSudoku[68] + numeroSudoku[77] == 45 ) { if(numeroSudoku[6] + numeroSudoku[15] + numeroSudoku[24] + numeroSudoku[33] + numeroSudoku[42] + numeroSudoku[51] + numeroSudoku[60] + numeroSudoku[69] + numeroSudoku[78] == 45 ) { if(numeroSudoku[7] + numeroSudoku[16] + numeroSudoku[25] + numeroSudoku[34] + numeroSudoku[43] + numeroSudoku[52] + numeroSudoku[61] + numeroSudoku[70] + numeroSudoku[79] == 45 ) { if(numeroSudoku[8] + numeroSudoku[17] + numeroSudoku[26] + numeroSudoku[35] + numeroSudoku[44] + numeroSudoku[53] + numeroSudoku[62] + numeroSudoku[71] + numeroSudoku[80] == 45 ) { return true; } } } } } } } } } else return false; } bool compruebaHorizontal() { bool sudokuCorrecto = false; if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] == 45 ) { if(numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] == 45 ) { if(numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 ) { if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] == 45 ) { if(numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] == 45 ) { if(numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] + numeroSudoku[48] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 ) { if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] == 45 ) { if(numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] == 45 ) { if(numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 ) { return true; } } } } } } } } } else return false; } bool compruebaCuadros() { bool sudokuCorrecto = false; if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] == 45 ) { if(numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] == 45 ) { if(numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 ) { if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] == 45 ) { if(numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] == 45 ) { if(numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 ) { if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] == 45 ) { if(numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] == 45 ) { if(numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 ) { return true; } } } } } } } } } else return false; }
El código no está para nada optimizado (puede ocupar menos de la mitad de lineas usando arrays multidimensionales),lo he hecho rápido antes de ir a acostarme . El usuario introduce los valores por lineas en un archivo de texto, de izquierda a derecha del sudoku es decir siguiendo esta imagen: http://i.msdn.microsoft.com/dynimg/IC37479.gifUna parte del archivo de texto quedaría así: Precisamente con el sudoku de ese gif he hecho la prueba del programa y funciona Cuando tenga tiempo lo optimizaré, de momento 35 puntos más, esto engancha que te cagas
|
|
« Última modificación: 2 Octubre 2012, 14:20 pm por Eternal Idol 7D »
|
En línea
|
[/url]
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
No lo hago por los puntos, sino porque no tengo nada más que hacer XDD 3- Un programa que diga el numero mas grande. El usuario ha de insertar 4 numeros separados por un espacio.#include <iostream> using namespace std; int main() { int a[4]; int mayor=0; cout << "digite los números, con cada espacio se registra un numero nuevo: "; for(int i=0; i<4; i++) cin >> a[i]; // BARRIDO for(int i=0; i<4; i++){ if(a[i] > mayor){ mayor = a[i]; } } cout << "El mayor es: " << mayor << endl; cin.get(); return 0; }
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Tienes el problema que si introduzco cuatro números negativos el mayor es, como no, el cero ... que no forma parte de los cuatro números. Tendrías que usar la libreria limits y asignarle a menorel valor de entero que es int_MIN o algo así. Pero insisto en algo que postee anteriormente, no se está haciendo lo que dice textualmente el enunciado:3- Un programa que diga el numero mas grande. El usuario ha de insertar 4 numeros separados por un espacio.Este código sí hace lo que se pide: #include <iostream> #include <cstdio> using namespace std; main() { int a,b,c,d,mayor; char ch,cad[100]/*= "17 32 15 27"*/; cout <<"Introduzca cuatro numeros separados por un espacio:"<< endl; gets (cad); sscanf(cad, "%d%c%d%c%d%c%d",&a, &ch ,&b,&ch, &c,&ch, &d ); if ((a= a>b ? a:b)>(c= c>d ? c:d)) cout << a << endl; else cout << "mayor = " << c << endl; return 0; }
|
|
|
En línea
|
|
|
|
Stakewinner00
|
ya actualice los puntos,si se les ocurre algo para los retos mejor
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
12- Un programa que haga diversos rombos de 2 * n -1 lineas como en el siguiente ejemplo Entrada: 4 SAlida: * *** ***** ******* ***** *** * 25 puntos #include <iostream> using namespace std; int main() { int n,fila,col; cout << "tamanyo de la piramide: "<<endl; cin >> n; for(fila=1;fila<=n;fila++) { for(col=1;col<=n-fila;col++) cout<<" "; for(col=1;col<=2*fila-1;col++) cout<<"*"; cout<<endl; } /* Escritura de la parte inferior */ for(fila=n-1;fila>=1;fila--) { for(col=1;col<=n-fila;col++) cout<<" "; for(col=1;col<=2*fila-1;col++) cout<<"*"; cout<<endl; } }
__ EI: juntando mensajes.1-Un programa que cuente los caracteres que tiene un texto previamente introducido por el usuario (parece más fácil de lo que es)ejemplo de entrada: "ho la" ejemplo salida:el texto tiene 5 caracteres 1 punto Incluyendo espacios en blanco: #include <iostream> #include <stdio.h> using namespace std; main() { int i; char cadena [200]; gets (cadena); for (i=0;cadena [i]!='\0';i++) ; cout << "El texto tiene " << i << " caracteres." << endl; return 0; }
|
|
« Última modificación: 2 Octubre 2012, 19:30 pm por Eternal Idol 7D »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Por favor no escriban dos (o mas) mensajes consecutivos.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
SUDOKU (No se el numero de reto...) Ya esta. /* * Linea de comandos: Nombre programa fichero * * El fichero debe tener el siguiente formato: * - 9 filas con 9 numeros separados por espacios * - Los numeros que vengan dados en el sudoku se escribiran en la posicion que corresponde * - Las casillas vacias del sudoku se indicaran con ceros * - Todas las filas deben acabar en un salto de linea * - Cuanquier linea que siga a las 9 primeras sera ignorada. * * * Salida: Muestra como mucho 2 soluciones (las suficientes para que el contenido del fichero no sea un sudoku correcto) * y sino indica que no hay solucion. * */ #include <iostream> #include <cstdio> #include <cstring> using namespace std; class Sudoku { public: Sudoku(); bool cargar(char *nombrefichero); bool solucionar(); bool solucion_unica(); inline bool esta_solucionado(){return solucionado;}; friend ostream& operator <<(ostream &out,Sudoku &s); private: bool correcto(int fila, int columna, int valor); bool resolver(int fila, int columna); bool multiples_soluciones(int fila, int columna); int tabla[9][9]; bool solucionado; }; Sudoku::Sudoku() { for(int i = 0 ; i < 81 ; i++) tabla[i / 9][i % 9] = 0; solucionado = false; } bool Sudoku::cargar(char *nombrefichero) { int i; char fila[19]; //los 9 numeros + 8 espacios + 1 salto de linea + '\0'; FILE *f; if(!(f = fopen(nombrefichero,"r"))) return false; for(i = 0 ; i < 9 ; i++) { fgets(fila,19,f); if(strlen(fila) < 18 || fila[strlen(fila) - 1] != '\n') //formato incorrecto { for(int j = 0 ; j < i ; i++) //anulamos la lectura que habia hasta el momento memset(tabla[j] , 0 , 9 * sizeof(int)); fclose(f); return false; } for(int j = 0 ; j < 9 ; j++) { if(fila[2 * i] < '0' || fila[2 * i] > '9')//Si las posiciones pares no son un numero { for(int k = 0 ; k < i ; k++) //anulamos la lectura que habia hasta el momento memset(tabla[k],0,9*sizeof(int)); fclose(f); return false; } if(fila[2 * i + 1] != ' ' && fila[2 * i + 1] != '\n')//Si las posiciones impares no son ni espacio ni \n { for(int k = 0 ; k < i ; k++) //anulamos la lectura que habia hasta el momento memset(tabla[k],0,9*sizeof(int)); fclose(f); return false; } } //traducimos la fila para el algoritmo for(int j = 0 ; j < 9 ; j++) tabla[i][j] = fila[2 * j] - '0'; } fclose(f); return true; } bool Sudoku::solucionar() { return resolver(0,0); } bool Sudoku::solucion_unica() { return !multiples_soluciones(0,0); } bool Sudoku::correcto(int fila, int columna, int valor) { for(int i = 0 ; i < 9 ; i++) { if(tabla[i][columna] == valor) return false; if(tabla[fila][i] == valor) return false; if(tabla[3 * (fila / 3) + i / 3][3 * (columna / 3) + i % 3] == valor) return false; } return true; } bool Sudoku::resolver(int fila, int columna) { if(fila == 9) { solucionado = true; return true; } if(tabla[fila][columna] != 0) //Si tenemos un numero original { if(resolver((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9)) //pasamos a resolver la siguiente posicion return true; } else { //probamos cada uno de los numeros for(int i = 1 ; i <= 9 ; i++) { if(correcto(fila,columna,i)) //Si es corrector en la posicion dada { tabla[fila][columna] = i; //Marcamos la casilla con el numero //Y pasamos a resolver la siguiente posicion if(resolver((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9)) return true; } } tabla[fila][columna] = 0; //Volvemos a dejar vacia la posicion actual } return false; } bool Sudoku::multiples_soluciones(int fila, int columna) { if(fila == 9) { if(!solucionado) { cout << *this << endl; solucionado = true; return false; } cout << *this << endl; return true; } if(tabla[fila][columna] != 0) //Si tenemos un numero original { if(multiples_soluciones((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9)) //pasamos a resolver la siguiente posicion return true; } else { //probamos cada uno de los numeros for(int i = 1 ; i <= 9 ; i++) { if(correcto(fila,columna,i)) //Si es corrector en la posicion dada { tabla[fila][columna] = i; //Marcamos la casilla con el numero //Y pasamos a resolver la siguiente posicion if(multiples_soluciones((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9)) return true; } } tabla[fila][columna] = 0; //Volvemos a dejar vacia la posicion actual } return false; } ostream& operator <<(ostream &out,Sudoku &s) { for(int i = 0 ; i < 9 ; i++) { if(!(i % 3)) out << endl; for(int j = 0 ; j < 9 ; j++) { if(!(j % 3)) out << ' '; out << s.tabla[i][j] << ' '; } out << endl; } return out; } int main(int argc, char *argv[]) { Sudoku sudoku; if(argc != 2) { cout << argv[0] << " fichero"; return -1; } if(!sudoku.cargar(argv[1])) { cout << "Error en carga de fichero." << endl; return -1; } if(sudoku.solucion_unica() && sudoku.esta_solucionado()) { cout << "El sudoku tiene una unica solucion:" << endl; } else if(sudoku.esta_solucionado()) cout << "El fichero no contiene un sudoku correcto. Tiene mas de una solucion." << endl; else cout << "El sudoku no tiene solucion." << endl; return 0; }
|
|
« Última modificación: 3 Octubre 2012, 15:42 pm por do-while »
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
Stakewinner00
|
SUDOKU (No se el numero de reto...)
El codigo no era correcto.
Lo reviso y lo vuelvo a colgar.
¡Saludos!
ok ya vi k algo raro pasaba.
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
10- Un programa que escriba al revés las palabras.Entrada: hola Salida: aloh 15 puntos #include <iostream> #define T 100 using namespace std; int main() { char palabra[T]; for(int i=0; i<T; i++){ palabra[i]= '\0'; } cout << "Ingrese la palabra: "; cin >> palabra; cout << "Palabra al reves:"; for(int i=99; i>=0; i--){ if(palabra[i] != '\0') cout << palabra[i]; } return 0; }
Creo que este es el ultimo que hare... Los demás bueno, O ya han sido publicados, o simplemente no se hacerlos. Y por ejemplo, el 11 y el 12, ya se como hacerlos, los tengo por ahi, pero son inspirados en paueky, es decir, son copiados, y bah... De todas maneras superpost!!!!! pase buen tiempo, el diccionario, el hash, y esos altos aún no se como hacerlos. Pero algún día!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[RECOPILACION DE RETOS] VBClassic Por 79137913
Programación Visual Basic
|
79137913
|
5
|
14,467
|
21 Enero 2013, 18:58 pm
por 79137913
|
|
|
Zona de retos Scripting
« 1 2 3 »
Scripting
|
Eleкtro
|
23
|
55,712
|
20 Enero 2014, 19:16 pm
por Eleкtro
|
|
|
Retos de java
« 1 2 »
Java
|
4dr14n31t0r
|
10
|
5,737
|
22 Enero 2016, 16:06 pm
por 0xFer
|
|
|
Retos forenses en español?
Dudas Generales
|
Sapote
|
0
|
2,073
|
22 Mayo 2017, 02:58 am
por Sapote
|
|
|
Retos(1 - 15) (wardGame)
« 1 2 »
Desafíos - Wargames
|
4A45414E
|
14
|
8,199
|
10 Noviembre 2018, 03:16 am
por zonahurbana
|
|