P1328 生活大爆炸版石头剪刀布 解题思路

· · 题解

题面很好理解,不再赘述。

解题思路

主要分为 4 个步骤。

Step one 储存游戏结果

int n, a, b, p[205],q[205], x, y;
int k[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}};

Step two 输入

cin >> n >> a >> b;
for (int i = 0; i < a; i++) 
    cin >> p[i];
for (int i = 0; i < b; i++) 
    cin >> q[i];

Step three 加减

for (int i = 0; i < n; i++)
{
    x += k[p[i % a]][q[i % b]];
    y += k[q[i % b]][p[i % a]];
}

Step four 输出

cout << x << ' ' << y;

看到了吗,我们把题目拆解成四个部分,每个部分都很简单、很基础。这题本身就不是很难,但如果遇到难题,思路也是将它拆解成几个你会写的代码,所谓的“难题”也就不难了,这和做数学题一个道理。

代码

#include <iostream>
using namespace std;
int n, a, b, p[205],q[205], x, y;
int k[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 main() {
    cin >> n >> a >> b;
    for (int i = 0; i < a; i++) 
        cin >> p[i];
    for (int i = 0; i < b; i++) 
        cin >> q[i];
    for (int i = 0; i < n; i++) {
        x += k[p[i % a]][q[i % b]];
        y += k[q[i % b]][p[i % a]];
    }
    cout << x << ' ' << y;
    return 0;
}

完结撒花。