Calendario de competición de la Copa Blue Bridge

Descripción del problema
  Hay 2 n (n <= 6) equipos jugando juegos de ciclo único, que se planean completar dentro de 2 n - 1 día, y cada equipo juega un juego todos los días. Diseñe un horario de juego para que cada equipo compita con diferentes oponentes dentro de 2 n - 1 día.
Formato de entrada
  El archivo de entrada matchplan.in consta de una línea e ingresa el valor de n.
Formato de salida
  El archivo de salida matchplan.out tiene un total de (2 n - 1) líneas, y la línea i muestra el calendario de partidos para el día i.
  El formato es: <i> AB, CD, .... Donde i es el número de días, A y B son los números de los dos lados del juego, cada fila tiene un total de 2 n-1 coincidencias.
Entrada de muestra
2
Salida de muestra
<1> 1-2,3-4
<2> 1-3,2-4
<3> 1-4,2-3
La descripción de la salida de muestra es incorrecta. La coma debe ser un espacio. El formato de salida correcto de los datos de evaluación es el siguiente:

 

No lo hará, consulte https://blog.csdn.net/qq_34845121/article/details/60957163

1 #include <bits / stdc ++. H>
 2  usando el  espacio de nombres std;
 3  int a [ 70 ] [ 70 ]; // a [i] [j] registra si el equipo iy el equipo j han jugado 
4  int v [ 70 ] ;     // v [i] registra si el equipo i ha jugado 
5  int main () {
 6      int n;
 7      cin >> n;
 8      int len = 1 ;
 9      for ( int i = 1 ; i <= n ; i ++ ) {
 10          len * = 2; // len = Número de equipos 2 ^ n 
11      }    
 12      para ( int i = 0 ; i <len- 1 ; i ++) {     // Número de días de juego 2 ^ n-1, que es el número de líneas que se imprimirán 
13          printf ( " <% d> " , i + 1 ); // Días de salida 
14          memset (v, 0 , sizeof v);     // Restablecer (cada equipo en el nuevo día no tiene coincidencia) 
15          para ( int j = 0 ; j <len / 2 ; j ++) {     // n juegos por día, es decir, cuántas coincidencias salen por línea 
16             for ( int k = 1 ; k <= len; k ++) { // Atraviesa todos los equipos, encuentra el primer equipo en participar 
17                  if (v [k] == 1 ) { // Si el equipo ya vino ese día , Saltar 
18                      continuar ;
 19                  } 
 20                  int juez = 0 ;     // juzgar si los dos equipos de k y h han jugado 
21                  para ( int h = 1 ; h <= len; h ++) { // atravesar todos los equipos, Encuentra el segundo equipo para jugar 
22                      si (k == h) { // No puedo compararme conmigo 
23                          continuar ;
 24                     }
 25                      if (v [h] == 1 ) { // Si el equipo ha venido ese día, omita 
26                          continuar ;
 27                      }
 28                      if (a [k] [h] == 0 && a [h] [ k] == 0 ) {     // h, si k equipos jugaron juntos ese día 
29                          printf ( " % d-% d " , k, h); // El equipo k y el equipo h jugaron 
30                          v [h] = 1 ;     // Marca el equipo h para dejar de jugar hoy 
31                          v [k] = 1 ;     //El equipo de Mark k no jugará hoy 
32                          a [k] [h] = 1 ;     // Mark h y k han jugado hoy 
33                          jueces = 1 ;     // Marca el final del jésimo juego, salta al siguiente 
descanso 34                          ;
 35                     }
 36                 }
 37 if (juez == 1 ) { // El final del jésimo juego, salta al siguiente   38 descanso ;
 39                 } 
 40             }
 41         }    
 42          printf ( " \ n " );
                   
                        43      }
 44      devuelve  0 ;
45 }

 

Supongo que te gusta

Origin www.cnblogs.com/fx1998/p/12684937.html
Recomendado
Clasificación