PAT Grado B 1018 Martillo, Tijeras, Tela (20 puntos)

contenido del tema

Todos deberían jugar el juego de "martillo, tijeras y papel": dos personas hacen gestos al mismo tiempo, y las reglas de ganar y perder se muestran en la figura:

higoCJB.jpg

Ahora dé el registro de la confrontación entre los dos, cuente el número de victorias, empates y derrotas de los dos lados, y dé los gestos de los dos lados que tienen la mejor oportunidad de ganar.

Formato de entrada:

Ingrese la línea 1 para dar un número entero positivo N (≤105), el número de veces que pelearon los dos bandos. Luego hay N líneas, cada línea da la información de un enfrentamiento, es decir, los gestos dados por ambas partes al mismo tiempo. C En nombre de "martillo", J en nombre de "tijeras", B en nombre de "tela", la primera letra representa la Parte A, la segunda representa la Parte B, hay un espacio en el medio.

Formato de salida:

Las líneas 1 y 2 de la salida dan el número de victorias, empates y pérdidas de A y B respectivamente, y los números están separados por un espacio. La línea 3 da dos letras, que representan los gestos con más victorias de A y B, con un espacio en el medio. Si las soluciones no son únicas, se emite la solución alfabéticamente más pequeña.

Muestra de entrada:

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

sin línea en blanco al final

Salida de muestra:

5 3 2
2 3 5
B B

sin línea en blanco al final

Ideas para resolver problemas

Simule, use una matriz para acceder a los gestos de A y B, y use una estructura para registrar los resultados de cada juego. La clave en la estructura representa el gesto de la letra, y el valor registra el número de ganancias para cada gesto de A y B. Finalmente, se personaliza una función cmp para asegurar que el ganador Para los gestos con el mismo número de campos, se pueda generar el que tenga el orden lexicográfico más pequeño.

Código detallado

#include <iostream>
#include <algorithm>
using namespace std;
char a[100001][2];
int j1,j2,j3,y1,y2,y3;
int jc,jj,jb,yc,yj,yb;
typedef struct{
    char key;
    int value;
}tet;

void judge(char a,char b){
    if(a==b){
        j2++;y2++;
    }
    else if(a == 'C'&&b == 'J'){
        j1++;y3++;jc++;
    }
    else if(a == 'C'&&b == 'B'){
        y1++;j3++;yb++;
    }
    else if(a == 'J'&&b == 'C'){
         y1++;j3++;yc++;
    }
    else if(a == 'J'&&b == 'B'){
        j1++;y3++;jj++;
    }
    else if(a == 'B'&&b == 'C'){
        j1++;y3++;jb++;
    }
    else if(a == 'B'&&b == 'J'){
        y1++;j3++;yj++;
    }
    
    
}

bool cmp(tet a,tet b){
    if(a.value!=b.value){
        return a.value>b.value;
    }
    else return a.key<b.key;
}

char fun(int c,int j,int b){
    tet a[3]={
   
   {'C',c},{'J',j},{'B',b}};
    sort(a,a+3,cmp);
    return a[0].key;
}
int main(){
    int N;
    cin>>N;
    for(int i = 0;i<N;i++){
        cin>>a[i][0]>>a[i][1];
        judge(a[i][0],a[i][1]);
    }
    cout<<j1<<" "<<j2<<" "<<j3<<endl;
    cout<<y1<<" "<<y2<<" "<<y3<<endl;
    cout<<fun(jc,jj,jb)<<" "<<fun(yc,yj,yb);
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45660485/article/details/119298650
Recomendado
Clasificación