NOIP2014 生活大爆炸版石头剪刀布 解题报告(水题)

本文介绍了一种使用C++实现的游戏胜负模拟算法。通过构建一个胜负判断数组,并利用队列来模拟游戏进程,实现了对玩家输入的数据进行处理,最终得出双方的胜负次数。文章还分享了作者在开发过程中遇到的一些问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在线评测:

http://codevs.cn/problem/3716/

整体思路:

就打一个判断输赢的数组,然后搞个队列模拟就行了,,,

失误之处:

开始貌似没有注意c++手动打数组表的一些奇怪特性,

1
int jg[5][5] = {{1,3,2,2,3},{2,1,3,2,3},{3,2,1,3,2},{3,3,2,1,2},{2,2,3,3,1}};
这是正确的姿势,

体会心得:

貌似没啥,不要犯一些语言基础的问题,

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
queue <int> dl1,dl2;
int n,na,nb,a1,a2,tp;
int jg[5][5] = {{1,3,2,2,3},{2,1,3,2,3},{3,2,1,3,2},{3,3,2,1,2},{2,2,3,3,1}};
int main()
{
    scanf("%d%d%d",&n,&na,&nb);
    for (int i = 1;i <= na;i++)
    {
        scanf("%d",&tp);
        dl1.push(tp);
    }
    for (int i = 1;i <= nb;i++)
    {
        scanf("%d",&tp);
        dl2.push(tp);
    }
    for (int i = 1;i <= n;i++)
    {
        na = dl1.front();
        dl1.pop();
        dl1.push(na);
        nb = dl2.front();
        dl2.pop();
        dl2.push(nb);
        int ans = jg[na][nb];
        if (ans == 2)
            a1++;else
            if (ans == 3)
                a2++;
    }
    printf("%d %d\n",a1,a2);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值