P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
方案一: (打表, 暴力输出)
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int n, na, nb, x, y, xa[201], xb[201], i, j, a, ans, bns;
cin >> n >> na >> nb;
for (i = 1; i <= na; i++)
{
cin >> x;
xa[i] = x;
}
for (j = 1; j <= nb; j++)
{
cin >> y;
xb[j] = y;
}
ans = 0;
bns = 0;
i = 0;
j = 0;
for (a = 1; a <= n; a++)
{
i++;
j++;
if (i > na)i = 1;
if (j > nb)j = 1;
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++;
}
cout << ans << " " << bns;
//0——剪刀 1——石头 2——布 3——蜥蜴人 4——斯波克
return 0;
}
方案2:
我们可以手动打表, 但是在题目中我们已经把表打好了, 所以我们的目的...
就是把这个表复刻出来
#include<iostream>
using namespace std;
int main()
{
int Chart[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} };
int All_len; int T_a, T_b;
cin >> All_len >> T_a >> T_b;
int a[210] = { 0 };
int b[210] = { 0 };
for (int i = 0; i < T_a; i++)
{
cin >> a[i];
}
for (int i = 0; i < T_b; i++)
{
cin >> b[i];
}
int cnt_a = 0;
int cnt_b = 0;
for (int i = 0; i < All_len; i++)
{
cnt_a += Chart[a[i % T_a]][b[i % T_b]];
cnt_b += Chart[b[i % T_b]][a[i % T_a]];
}
cout << cnt_a << ' ' << cnt_b;
char lcz[] = "愿爱无忧.";
return 0;
}
这个代码我很希望记住