Hola, no se si habrá algún dardero (jugador de dardos) en el foro, si lo hay, seguro que alguna vez se ha preguntado cuantas formas distintas de hacer 26 puntos pueden existir, porque jugando al 501 es una de las puntuaciones que más veces se repite (sobre todo si eres malo ).
Pues bien, yo soy dardero y en mi equipo y con otros jugadores y equipos la pregunta ha surgido mil y una vez y me propuse averiguarlo científicamente.
Rebuscando por internet encontré un código en C++ para listar permutaciones de número cogidos de 3 en 3 (casi casi lo que yo quería) lo he modificado (y eso que de C++ ando muy justo) y he conseguido lo siguiente:
// Combinaciones para el juego de los dardos // Modificado por Roberto Pulido © 2012 del original // program k3b4.CPP - page 62 // Permutations. // c++ exercices book - dr. gershon kagan (first edition : 2001) // written in Borland CPP ver 3.1 #include <conio.h> #include <iostream.h> #include <iomanip.h> #define N 62 int a[N]; int T; void Init() { // el dardo fallado a[0] = 0; // dardo sencillo for(int i = 1; i < 21; a[i++] = i-1); a[21] = 25; // los dobles for(int j = 21; j < 42; a[j++] = a[42-j]*2); // los triples for(int k = 42; k < 62; a[k++] = a[62-k]*3); } // INIT void Show() { for(int i = 0; i < N; i++) cout << setw(5) <<a[i]; cout << endl << endl; } // SHOW // No se usa de momento void Permutations() { float p,combi; p = 0; combi = 0; for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) { if(i == j) continue; for(int k = 0; k < N; k++) { if (k == i || k == j) continue; if (a[i] + a[j] + a[k] == T) { combi++; cout << setw(23) << a[i] << setw(5) << a[j] << setw(5) << a[k] << endl; } p++; } } cout << endl; cout << "Total permutaciones : " << p << endl; cout << "Total combinaciones para " << T << " puntos : " << combi << endl; } void Combinations() { float combi; combi = 0; for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) for(int k = 0; k < N; k++) if (a[i] + a[j] + a[k] == T) { combi++; cout << setw(23) << a[i] << setw(5) << a[j] << setw(5) << a[k] << endl; } cout << endl; cout << "Total combinaciones para " << T << " puntos : " << combi << endl; } void main() { clrscr(); cout << "¨Qu‚ tirada deseas calcular? : "; cin >> T; cout << "Vamos a calcular las combinaciones con repetici¢n para " << T << " puntos"; getch(); cout << endl; cout << "Combinaciones de : " << endl; Init(); Show(); getch(); Combinations(); //Permutations(); cout << endl; cout << "** FIN DEL PROGRAMA **"; getch(); } // MAIN
Funcionar funciona, o eso creo, y me gustaría que opinarais sobre el código o si hay algún error para corregirlo antes de fardar con los amigos darderos de que hay 1857 combinaciones para hacer 26 puntos en una tirada

P.D. No seais muy duros

Gracias por adelantado.