生活大爆炸版剪刀石头布 ——【传送门】
这道题可以原原本本地说得上是一道水题了,通过判断两人的出拳不同给分然后统计输出。就是对于游戏得分表的处理不好弄,容易写的比较繁琐。
大多数同学可能都是这样写滴:
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;
}