Experimento 2 Licencias C

Titulo

El juego consta de cuatro personas en un círculo. Llamamos a las cuatro direcciones norte, sureste y oeste. El inglés correspondiente es Norte, Este, Sur, Oeste. El juego consta de un total de 52 cartas de póker. Para comenzar, nombramos un distribuidor (uno del sudeste y noroeste, identificado por las iniciales en inglés) para comenzar el trato, el orden del trato es en el sentido de las agujas del reloj, el distribuidor primero no trata consigo mismo, sino que trata con su próximo Persona (la siguiente persona en sentido horario). De esta manera, todos obtendrán 13 cartas.
Ahora definimos el orden de las cartas. Primero, el palo es (Ciruela) <(Cuadrado) <(Espada) <(Melocotón rojo), (Al entrar, usamos C, D, S, H para denotar ciruela y cuadrado, respectivamente. Picas, corazones, la primera letra de la palabra). Para el valor de la tarjeta, especificamos 2 <3 <4 <5 <6 <7 <8 <9 <T <J <Q <K <A.
Ahora, como Dios, debe ordenar las tarjetas en las manos de todos, de pequeñas a grandes, y enviarlas de acuerdo con el formato dado. (Consulte la descripción de salida y la salida de muestra para el formato específico).
La entrada contiene múltiples conjuntos de datos
. La primera línea de cada conjunto de datos contiene un carácter en mayúscula para indicar quién es el distribuidor. Si el carácter es '#', significa el final de la entrada.
Las siguientes dos líneas, cada una con 52 caracteres, representan 26 cartas, y las dos líneas suman un total de 52 cartas. Cada carta consta de dos personajes, el primer personaje representa el palo y el segundo personaje representa el valor.
Para generar los resultados de la licencia con múltiples conjuntos de datos, se debe generar una línea en blanco adicional después de cada conjunto de datos. ! ! ! !
Cada conjunto de datos debe constar de 24 líneas. La salida es en el sentido de las agujas del reloj. La salida de South Player siempre sale primero. Cada jugador sale primero una línea, es decir, el nombre del jugador (sureste noroeste), las siguientes cinco líneas, la primera y la quinta línea son fijas. Formato (ver muestra), los valores de salida de la segunda y cuarta líneas en secuencia y formato (ver muestra), y la tercera línea muestra patrones en secuencia y formato (ver muestra):

N
CTCAH8CJD4C6D9SQC7S5HAD2HJH9CKD3H6D6D7H3HQH4C5DKHKS9
SJDTS3S7S4C4CQHTSAH2D8DJSTSKS2H5D5DQDAH7C9S8C8S6C2C3
#
South player:
+---+---+---+---+---+---+---+---+---+---+---+---+---+
|6 6|A A|6 6|J J|5 5|6 6|7 7|9 9|4 4|5 5|7 7|9 9|T T|
| C | C | D | D | S | S | S | S | H | H | H | H | H |
|6 6|A A|6 6|J J|5 5|6 6|7 7|9 9|4 4|5 5|7 7|9 9|T T|
+---+---+---+---+---+---+---+---+---+---+---+---+---+
West player:
+---+---+---+---+---+---+---+---+---+---+---+---+---+
|2 2|5 5|9 9|K K|5 5|7 7|9 9|4 4|T T|J J|A A|8 8|A A|
| C | C | C | C | D | D | D | S | S | S | S | H | H |
|2 2|5 5|9 9|K K|5 5|7 7|9 9|4 4|T T|J J|A A|8 8|A A|
+---+---+---+---+---+---+---+---+---+---+---+---+---+
North player:
+---+---+---+---+---+---+---+---+---+---+---+---+---+
|3 3|4 4|J J|2 2|3 3|T T|Q Q|K K|8 8|Q Q|K K|2 2|3 3|
| C | C | C | D | D | D | D | D | S | S | S | H | H |
|3 3|4 4|J J|2 2|3 3|T T|Q Q|K K|8 8|Q Q|K K|2 2|3 3|
+---+---+---+---+---+---+---+---+---+---+---+---+---+
East player:
+---+---+---+---+---+---+---+---+---+---+---+---+---+
|7 7|8 8|T T|Q Q|4 4|8 8|A A|2 2|3 3|6 6|J J|Q Q|K K|
| C | C | C | C | D | D | D | S | S | H | H | H | H |
|7 7|8 8|T T|Q Q|4 4|8 8|A A|2 2|3 3|6 6|J J|Q Q|K K|
+---+---+---+---+---+---+---+---+---+---+---+---+---+

Ideas

Defina una estructura de tarjeta para almacenar trajes y valores, y defina una matriz constante para representar a cada jugador con un índice, lo cual es conveniente para definir el orden cuando se reparten cartas. Comience el siguiente índice del distribuidor en el orden de las agujas del reloj. Luego usa el módulo 4 para tomar dos personajes a la vez y agregarlos al mazo del jugador, y finalmente ordenar y sacar el mazo de cada jugador.

Resumen

El uso razonable de stl puede resolver problemas de manera más eficiente

Código

#include<stdio.h>
#include<string>
#include<cstring>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;

string mingci[4]={"South player:","West player:","North player:","East player:"};
char s[1000];
int start;
struct pai
{ 
	char x,y; 
	pai();
	pai(char x,char y):x(x),y(y){};
};
int check(char c)//获取花色
{ 
	if (c=='C') return 0; if (c=='D') return 1; if (c=='S') return 2; if (c=='H') return 3;}
int get(char c)//获取牌值
{ if (c=='A') return 14; if (c=='K') return 13; if (c=='Q') return 12; if (c=='J') return 11; if (c=='T') return 10; return c-'0';}

bool cmp(const pai &a,const pai &b)
{ if (a.x==b.x) return get(a.y)<get(b.y); return check(a.x)<check(b.x);}

vector<pai> a[4];//四人的牌堆

int main(){ 
int f=0; 
scanf("%s",s);
while (s[0]!='#') {


if (f) printf("\n"); 
else f=1;

switch (s[0])

{

case'E':start=0; break;

case'S':start=1; break;

case'W':start=2; break;

case'N':start=3; break;

}

for (int i=0;i<4;i++) a[i].clear();

scanf("%s",s);

scanf("%s",s+52);

for (int i=0;i<104;i+=2,start=(start+1)%4)

a[start].push_back(pai(s[i],s[i+1]));

for (int i=0;i<4;i++) 
sort(a[i].begin(),a[i].end(),cmp);
for (int i=0;i<4;i++)//输出
{
cout<<mingci[i]<<endl;
printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");
for (int j=0;j<a[i].size();j++)
{
printf("|%c %c",a[i][j].y,a[i][j].y);
if (j==a[i].size()-1) printf("|\n");
}
for (int j=0;j<a[i].size();j++)
{
printf("| %c ",a[i][j].x);
if (j==a[i].size()-1) printf("|\n");
}
for (int j=0;j<a[i].size();j++)
{
printf("|%c %c",a[i][j].y,a[i][j].y);
if (j==a[i].size()-1) printf("|\n");
}

printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+\n");


}scanf("%s",s); } return 0;}
20 artículos originales publicados · elogiados 3 · visitas 459

Supongo que te gusta

Origin blog.csdn.net/qq_44893580/article/details/104672435
Recomendado
Clasificación