拼題A520鑽石爭霸賽 7-6 隨機輸一次

題目描述:

大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:

FigCJB.jpg

現要求你編寫一個控制贏面的程序,根據對方的出招,給出對應的贏招。但是!爲了不讓對方意識到你在控制結果,你需要隔 K 次輸一次,其中 K 是系統設定的隨機數。

輸入格式:

輸入首先在第一行給出正整數 N(≤10),隨後給出 N 個系統產生的不超過 10 的正隨機數 { K​1​​,K​2​​,⋯,K​N​​ },數字間以空格分隔。這意味着第 i(i=0,1,⋯,N−1)次輸局之後應該隔 K​i+1​​ 次再讓下一個輸局。如果對方出招太多,則隨機數按順序循環使用。例如在樣例中,系統產生了 3 個隨機數 {2, 4, 1},則你需要:贏 2 次,輸 1 次;贏 4 次,輸 1 次;贏 1 次,輸 1 次;然後再次回到第 1 個隨機數,贏 2 次,輸 1 次。

之後每行給出對方的一次出招:“ChuiZi”代表“錘子”、“JianDao”代表“剪刀”、“Bu”代表“布”。“End”代表輸入結束,這一行不要作爲出招處理。輸入保證對方至少出了一招。

輸出格式:

對每一個輸入的出招,按要求輸出贏或輸局的招式。每招佔一行。

輸入樣例:

3 2 4 1
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
End

輸出樣例:

Bu
ChuiZi
ChuiZi
ChuiZi
JianDao
Bu
Bu
JianDao
ChuiZi
ChuiZi
ChuiZi
JianDao
JianDao

一個普通的模擬題,根據題意進行模擬即可,代碼如下:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

const int MAX = 19;

int b[MAX];

char a[MAX];

int N;

void print_win(char ans[])
{
    if(ans[0] == 'C')
        printf("Bu\n");
    else if(ans[0] == 'J')
        printf("ChuiZi\n");
    else if (ans[0] == 'B')
        printf("JianDao\n");
}
void print_lose(char ans[])
{
    if(ans[0] == 'C')
        printf("JianDao\n");
    else if(ans[0] == 'J')
        printf("Bu\n");
    else if (ans[0] == 'B')
        printf("ChuiZi\n");
}
int main()
{
    scanf("%d", &N);
    for(int i = 0; i < N; i++)
        scanf("%d", &b[i]);

    int cnt = 0, flag = 0;
    while(scanf("%s", a))
    {
        if(a[0] == 'E')
            break;
        if(cnt < b[flag])
        {
            print_win(a);
            cnt++;
        }

        else
        {
            print_lose(a);
            cnt = 0;
            flag ++;
            flag = flag % N;
        }

    }

    return 0;
}




 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章