題目描述:
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現要求你編寫一個控制贏面的程序,根據對方的出招,給出對應的贏招。但是!爲了不讓對方意識到你在控制結果,你需要隔 K 次輸一次,其中 K 是系統設定的隨機數。
輸入格式:
輸入首先在第一行給出正整數 N(≤10),隨後給出 N 個系統產生的不超過 10 的正隨機數 { K1,K2,⋯,KN },數字間以空格分隔。這意味着第 i(i=0,1,⋯,N−1)次輸局之後應該隔 Ki+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;
}