JakeLin- [entrenamiento ACM] interesante problema del juego / fácil de entender

Título Descripción
Para enriquecer la vida extracurricular de los miembros del grupo, la Academia organizó un concurso para aprender el conocimiento de un país fuerte. Las reglas de puntaje del concurso son: cada jugador tiene un puntaje inicial de 10 puntos, y los concursantes deben responder 10 preguntas (numeradas del 1 al 10) , La respuesta es correcta, el puntaje actual se duplica, si la respuesta es incorrecta, se deducirá el puntaje con el mismo número de pregunta.

De entrada

La primera línea tiene un número entero M (1 <= M <100) significa que hay M conjuntos de datos de prueba; luego cada línea ingresa un puntaje de puntaje (0≤ puntaje ≤100)

Salida

Asumiendo que no has visto el juego, muestra el número de situaciones posibles para cada puntaje y -1 si no hay situaciones posibles. (Sugerencia: si 0 representa la pregunta incorrecta del jugador, 1 representa la pregunta correcta del jugador y el puntaje final del jugador es 90, puede haber las siguientes dos situaciones
1110000010
0001110110)

Entrada de muestra

3 
68 
63 
100

Salida de muestra

7 
-1 
3

Enlace del título original: juego interesante

 

Observar:

0000000000 -> 0
0000000001 -> 1
0000000010 -> 2

1111111111 -> 1023


Encontrado:

Solo necesita atravesar 0 ~ 1023 para obtener todos los casos y juzgar si cada caso cumple con el puntaje ingresado.


Te necesito

  • 1. Sujete el número decimal al número binario (% 2 cada vez)
  • 2. La vacante frontal debe llenarse con 0 (el conjunto se establece en 0 y el resultado de insertar% 2 desde atrás)
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main() {
    int m;
    cin>>m;
    int a[10];
    while(m--) {
        int score;
        cin>>score;
        int cnt=0;
        for(int i=0; i<=1023; i++) {
            memset(a,0,sizeof(a));
            int p=9;
            int t=i;
            while(t) {
                a[p--]=t%2;
                t/=2;
            }
            int s = 10;
            for(int j=0; j<10; j++) {
                if(a[j]==0) s-=(j+1);
                else s*=2;
            }
            if(score==s) cnt++;
        }
        if(cnt==0) cout<<-1<<endl;
        else cout<<cnt<<endl;
    }
    return 0;
}

 

 

Publicó 20 artículos originales · ganó 15 · vistas 216

Supongo que te gusta

Origin blog.csdn.net/qq_37414463/article/details/105388165
Recomendado
Clasificación