P2348三国杀I(洗牌发牌)

P2348三国杀I(洗牌发牌)
题⽬⾃⼰看⼀看吧,太长了不太好复制,
(本题出⾃洛⾕P2348)
~~⼀开始想去a猪国杀(被吓到了)~~
于是我就来a这个题了
其实还是简单⼀点的模拟
三个难点
市政隔离栏
1.对于每⼀张牌的输⼊烫毛机
2.洗牌时的操作
3.最后的输出
分布式光学孔径系统### 逐个解决
1.输⼊的时候利⽤⼀个结构体对于这个进⾏定义
```cpp
struct pai{//利⽤结构体对于每⼀张牌便于操作
string c;
string s;
```
把c字符串看做两东西(color+number)
然后s字符串是type
(不⽤考虑每⼀张牌有什么⽤,⼲什么的,上⾯的⼀东西都是吓⼈的,我们只要知道输⼊的是字符就可以了)
2.洗牌的时候(是⼀种⼤佬级别的洗牌,那种中分之后⼀叠⼀)
(洗牌⽅式:k/2+1,1,k/2+2,2,k/2+3,3, ... ,k,k/2(可以有奇数张牌,最后⼀张牌将被⽆耻的度娘吃掉))要对次数进⾏考虑,我利⽤的是while循环(每次--)```cpp
while(cishu--)
```
3.最后的分牌的时候就可以遵循题⽬给你的⽅法啊
第i张牌给第(i-1)%n+1个⼈
如果这第(i-1)%n+1个⼈是P,那么就把这张牌压⼊数组就好了啊
最后的⼀个for循环便于输出
# ac代码如下
```cpp
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
铝合金框架#define itn int//防⽌⼿滑操作
using namespace std;
struct pai{//利⽤结构体对于每⼀张牌便于操作
string c;
string s;
}paiku[100005],b[100005],ans[100005];
int main()
{
int n,m,cishu,p;
cin>>n>>m>>cishu>>p;
if(m<n*4)//牌不够
{
printf("Error:cards not enough");
return 0;//对于牌不够的情况,直接结束程序,停⽌操作
}
m=m/2*2;//可以有奇数张牌,最后⼀张牌将被⽆耻的度娘吃掉
for(int i=1;i<=m;i++)
{
cin>>paiku[i].c>>paiku[i].s;
}//建牌库;
while(cishu--)zssi
{
int j=1;
for(int i=1;i<=m-1;i+=2,j++)//在期间对于j进⾏++操作
{
b[i]=paiku[m/2+j];
b[i+1]=paiku[j];
}
for(int i=1;i<=m;i++)
paiku[i]=b[i];//重新存回paiku数组(⽅便下⼀次操作)
}
int j=1;
for(int i=1;i<=m&&j<5;i++)//标记⼀下对于j的要求
if((i-1)%n+1==p)//这是分牌的操作,基本这是题⽬给的(从第1张牌开始,第i张牌给第(i-1)%n+1个⼈)
{
ans[j]=paiku[i];
j++;
}
for(int i=1;i<=4;i++)
cout<<ans[i].c<<' '<<ans[i].s<<endl;
//最后按要求输出就ok了
return 0;
}
```
我在⾥⾯加了⼀个对于牌数的特判,⼤约是在第16--20⾏。
这个题光看牌⾯的话还是有点吓⼈的,但是如果你跳出来,不去考虑三国杀得规则的话,其实就是⼀个起名复杂⼀点的分扑克,(吐槽⼀下,⾥⾯的那个j是真的恶⼼,试了好多遍才试出真正的位置)pbcl2
博客写的不是太好,直接复制过来的,(我⾃⼰写的)

本文发布于:2024-09-22 04:26:03,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/276204.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:操作   洗牌   考虑   猪国
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议