Algoritmo de enumeración de C ++



¿Qué es un algoritmo de enumeración?
  La enumeración, como su nombre lo indica, es resolver el problema con el método más torpe (enumeración violenta). Una enumeración de conjuntos es un programa que enumera todos los miembros de un conjunto de secuencias finitas, o un recuento de objetos de un tipo específico . Estos dos tipos a menudo (pero no siempre) se superponen.

El algoritmo de enumeración es el que más usamos en nuestra vida diaria. Su idea central es:


La esencia de enumerar todos los métodos de enumeración posibles es buscar la solución correcta de todas las respuestas candidatas. El uso de este algoritmo debe cumplir dos condiciones: (1) el número de respuestas candidatas puede predeterminarse; (2) el rango de respuestas candidatas es Debe haber un cierto conjunto antes de resolver.
Las siguientes preguntas le darán una mejor comprensión de la enumeración.

1.
Descripción del tema del número de piso :

Kobayashi se hospedó en el hotel "New World" durante la competencia NOIP. A diferencia de otros hoteles, este hotel tiene un número t de alta energía todos los días. Este número no aparecerá en el piso. Tomando t = 3 como ejemplo, los pisos 3, 13, 31, 33 y demás no existen.
, los números del piso son 1, 2, 4, 5, ... Así que el 4to piso actual es el 3er piso. Se sabe que Kobayashi ha reservado la habitación con el piso número m, y el número de alta energía del día es t. Ahora quiere saber dónde está la habitación. ¿Cuál es el piso real?
1
2
3
4
Ingrese la descripción

Una línea de dos enteros myt, 1 <= m <= 100000, 0 <= t <= 9, para garantizar que m tenga una descripción de salida legal
1 para t

Alinear un entero que representa el suelo real de
1
Ejemplo de entrada

14 3

Salida de muestra

12

Ideas:

1. El piso que contiene este número de alta energía no debe aparecer, entonces el algoritmo es el siguiente

bool s ( int a, int b) {
 while (a! = 0 ) {
 if (a% 10 == b) {
 return  false ; 
} 
a / = 10 ; 
} 
devuelve  verdadero ; 
}

 


2. Use un bucle for para acumular suma, si no contiene números de alta energía (es decir, s (i, números de alta energía) = verdadero), entonces suma ++

 

para ( int i = 1 ; i <= m; i ++ ) {
 if (s (i, t)) { 
sum ++ ; 
} 
} 
cout << suma

 


Código:

#include <iostream>
 usando el  espacio de nombres estándar;
bool s ( int a, int b) {
 while (a! = 0 ) {
 if (a% 10 == b) {
 return  false ; 
} 
a / = 10 ; 
} 
devuelve  verdadero ; 
} 
int main () {
 int m, t, sum = 0 ; 
cin >> m >> t;
for ( int i = 1 ; i <= m; i ++ ) {
 if  (s (i, t)) {
sum ++; 
} 
} 
cout << sum;
devuelve  0 ; 
}

 



2. Curling


Descripción del título:

En el juego de curling, se dan un punto objetivo P y un entero positivo específico r. Después de cada juego, los equipos A y B se turnaban 8 veces y el juego terminaba. En este momento, el rizado de qué lado está finalmente más cerca del punto objetivo P, el lado puntúa y el otro lado no puntúa. Cada grupo de puntuación puede obtener 1 punto si la distancia desde el punto objetivo P es menor o igual a r, y la posición de rizado está más cerca del punto objetivo P que todos los rizos del otro equipo

El juego se puede jugar hasta 10 entradas. Después del final de un partido entre los dos lados, el lado rezagado puede abstenerse. En este punto, el juego ya no continúa

Se sabe que al final de cada ronda, la distancia entre cada lado rizado de los dos lados desde el punto objetivo P y el entero positivo r, escriba un programa para juzgar el puntaje de cada ronda entre los dos equipos y el puntaje total

Ingrese:

Un entero positivo r en la primera línea

 

Hay varias líneas debajo (no más de 20 líneas), cada línea de 8 enteros positivos (con un espacio entre ellos)

 

El número j en la segunda línea indica la distancia desde el jth curling de la Parte A hasta el punto objetivo P al final del primer juego.

 

El jésimo número en la tercera línea indica la distancia desde el jésimo curling de la Parte B hasta el punto objetivo P al final del primer juego

...

El número j de la línea 2k indica la distancia desde el jth curling de la Parte A hasta el punto objetivo P al final del kth juego

El número j en la línea 2k + 1 indica la distancia desde el jth curling de la Parte B hasta el punto objetivo P al final del kth juego

Si una de las partes se abstiene hasta la mitad, la última línea (línea par) solo tiene un número entero -1, lo que indica que se produce una exención en este momento

:

Se emiten varias líneas, con dos enteros en cada línea, separadas por dos puntos en el medio, que indican los puntajes de ambas partes en cada juego (un puntaje primero). Hay 2 enteros en la última línea, separados por dos puntos en el medio, que indican el puntaje final de ambas partes (A marca primero)

Esto significa, primero ingrese un "estándar" r, hay 10 juegos, cada juego se juega 8 veces, tome el mejor puntaje (el más reciente es el más pequeño) y luego compare con el mejor puntaje del oponente, más bajo que el oponente no debe Si el puntaje es más alto que el oponente, el puntaje será menor o igual al estándar. Es decir, en cada juego, uno de los puntajes no debe ser anotado, y puede que no haya puntaje. Si se abstiene, puede emitir y devolver directamente 0; Finalmente, la puntuación total se emite (solo cuenta)
1
2
3
principalmente enumeración

Entrada de muestra

12

5 60 25 74 71100 3 93

66 75 70 66 52 73 67 14

93 84 74 99 79 64 89 22

65 5 95 59 80 8 35 61

65 61 49 60 58 50 32 85

68 38 96 38 82 64 26 93

74 92 47 21 97 30 45 78

44 99 90 27 3 46 55 34

49 45 83 3 18 1 67 23

60 47 95 81 17 1 87 85

18 74 74 84 29 20 27 71

37 60 26 56 23 65 67 49

57 7 62 92 52 5 10 69

46 97 88 28 76 27 66 7

89 89 94 31 11 20 1 17

19 48 35 6 77 61 45 21

52 11 76 70 73 99 85 55

90 25 20 7 64 24 94 4

3 43 32 74 10 93 35 77

77 100 63 91 10 73 22 57

Salida de muestra

2: 0

0: 2

0: 0

0: 1

0: 0

0: 0

1: 0

1: 0

0: 2

1: 0

5: 5

Explicación de muestra:

Puedes ver que el estándar es 12,

En el primer juego, A tiene el 3 más bajo, B tiene el 14, 3 <14 && 3 <= 12 más bajo, A puntúa, B no puntúa

En el segundo juego, A tiene el 22 más bajo, B tiene el 5, 5 <22 && 5 <= 12 más bajo, B puntúa, A no puntúa

En el tercer juego, A tiene un mínimo de 32 y B tiene un mínimo de 26

。。。。。。

Código

#include <iostream> 
#include < string >
 usando el  espacio de nombres std;
int main () 
{ 
int r, i, j; 
cin >> r;
int a [ 9 ], b [ 9 ], f = 0 , f1 = 0 , zf = 0 , zf1 = 0 , min = 10000 , min1 = 100000 ;
para (i = 1 ; i <= 10 ; i ++ ) 
{ 
para (j = 1 ; j <= 8 ; j ++ ) 
{ 
cin>> a [j];
if (a [ 1 ] == - 1 ) 
{ 
cout << zf << ' : ' << zf1;
devuelve  0 ; 
} 
} 
para (j = 1 ; j <= 8 ; j ++ ) 
{ 
cin >> b [j]; 
} 
para (j = 1 ; j <= 8 ; j ++ ) 
{ 
if (a [j] < min) 
{ 
min = a [j]; 
} 
} 
para (j = 1 ; j <=8 ; j ++ ) 
{ 
if (b [j] < min1) 
{ 
min1 = b [j]; 
} 
} 
if (min < min1) 
{ 
para (j = 1 ; j <= 8 ; j ++ ) 
{ 
if (a [j] <= r && a [j] < min1) 
{ 
f ++ ; 
} 
} 
cout << f << ' : ' << f1 << endl; 
zf = zf + f; 
f = 0 ; 
} 
else  if (min1 < min)
{
para (j = 1 ; j <= 8 ; j ++ ) 
{ 
if (b [j] <= r && b [j] < min) 
{ 
f1 ++ ; 
} 
} 
cout << f << ' : ' << f1 << endl; 
zf1 = zf1 + f1; 
f1 = 0 ; 
} 
else 
{ 
cout << 0 << ' : ' << 0 << endl; 
} 
min = 10000 ;
} 
cout << zf << ' : ' << zf1;
devuelve  0 ; 
}

 



El método para encontrar el valor mínimo se usa aquí, y también se puede cambiar a [0] después de ordenar.

 

Supongo que te gusta

Origin www.cnblogs.com/AK-IOI/p/12726284.html
Recomendado
Clasificación