【luoguP1238】【NOIP2014】生活大爆炸版剪刀石头布

           生活大爆炸版剪刀石头布                      ——【传送门】

这道题可以原原本本地说得上是一道水题了,通过判断两人的出拳不同给分然后统计输出。就是对于游戏得分表的处理不好弄,容易写的比较繁琐。

大多数同学可能都是这样写滴:

            if(xa[i]==0&&xb[j]==1)bns++;
            if(xa[i]==0&&xb[j]==2)ans++;
            if(xa[i]==0&&xb[j]==3)ans++;
            if(xa[i]==0&&xb[j]==4)bns++;
            if(xa[i]==1&&xb[j]==0)ans++;
            if(xa[i]==1&&xb[j]==2)bns++;
            if(xa[i]==1&&xb[j]==3)ans++;
            if(xa[i]==1&&xb[j]==4)bns++;
            if(xa[i]==2&&xb[j]==0)bns++;
            if(xa[i]==2&&xb[j]==1)ans++;
            if(xa[i]==2&&xb[j]==3)bns++;
            if(xa[i]==2&&xb[j]==4)ans++;
            if(xa[i]==3&&xb[j]==0)bns++;
            if(xa[i]==3&&xb[j]==1)bns++;
            if(xa[i]==3&&xb[j]==2)ans++;
            if(xa[i]==3&&xb[j]==4)ans++;
            if(xa[i]==4&&xb[j]==0)ans++;
            if(xa[i]==4&&xb[j]==1)ans++;
            if(xa[i]==4&&xb[j]==2)bns++;
            if(xa[i]==4&&xb[j]==3)bns++;    

恶心的一匹i啊是不是,但是你完全就可以在main函数之外定义这么一个东西:

int pits[5][5] = {{0,0,1,1,0},{1,0,0,1,0},{0,1,0,0,1},{0,0,1,0,1},{1,1,0,0,0}};

这样对得分表的处理就可以非常简洁有效了不是么。

下面附上全部代码:

#include<iostream>
#include<cstdio>
#define MAXNM 5
#define MAXN 210
using namespace std;
int B, NA, NB, data[MAXN], data2[MAXN], cnta, cntb;
int vs[MAXNM][MAXNM] = {{0,0,1,1,0},{1,0,0,1,0},{0,1,0,0,1},{0,0,1,0,1},{1,1,0,0,0}};
int main()
{
    cin >> N >> NA >> NB;
    for(int i = 0; i < NA; i++) cin >> data[i];
    for(int i = 0; i < NB; i++) cin >> data2[i];
    for(int i = 0; i < N; i++)
    {
        cnta += pits[a[i % NA]][b[i % NB]];
        cntb += pits[b[i % NB]][a[i % NA]];
    }
    cout << cnta << " " << cntb << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/sue_shallow/p/luoguP1238.html