请问这道C++题怎么做?
Alice、Bob和 Cindy一起玩猜拳的游戏。
和两个人的猜拳类似,每一轮,他们会从石头、剪刀、布中各自选一个出拳,基本的胜负规则是石头赢剪刀、剪刀赢布、布赢石头。如果一轮中正好可以分成胜负两边,则负边的每个人要支付给胜边的每个人一块钱。如果无法分成胜负两边,则都不出钱。
比如,如果 Alice 出石头,而 Bob 和 Cindy 都出布,则 Alice 要分支付 Bob 和 Cindy 一块钱。
再如,如果 Alice出石头,Bob出剪刀,Cindy出布,则都不出钱。
他们三人共进行了 n轮游戏,请问最后每个人净赚多少钱?即赚的钱减去支付的钱是多少?
输入格式
输入的第一行包含一个整数n ,表示游戏总共进行了n 轮。
接下来 n行,每行三个整数,分别表示 Alice、Bob和 Cindy一轮中所出的拳,0表示石头,1表示剪刀,2表示布。
输出格式
输出三行,每行一个整数,分别表示 Alice、Bob和 Cindy净赚的钱数。
样例输入
3
0 2 2
0 1 2
1 1 1
样例输出
-2
1
1
评测用例规模与约定
对于所有的评测用例,。1<=n<=100
求代码 展开
#include <stdio.h>
#include <stdlib.h>
int main()
{ int n,i,a[3],b[3],win[3]= {0};
scanf("%d",&n);
while(n--)
{ b[0]=b[1]=b[2]=0;
for(i=0; i<3; i++)
{ scanf("%d",&a[i]);
b[a[i]]=1;
}
if(b[0]+b[1]+b[2]!=2)continue;
if(abs(a[0]-a[1])==1)
{ if(a[0]<a[1])
win[0]++,win[1]--;
else win[0]--,win[1]++;
}
if(abs(a[0]-a[1])==2)
{ if(a[0]>a[1])
win[0]++,win[1]--;
else win[0]--,win[1]++;
}
if(abs(a[0]-a[2])==1)
{ if(a[0]<a[2])
win[0]++,win[2]--;
else win[0]--,win[2]++;
}
if(abs(a[0]-a[2])==2)
{ if(a[0]>a[2])
win[0]++,win[2]--;
else win[0]--,win[2]++;
}
if(abs(a[1]-a[2])==1)
{ if(a[1]<a[2])
win[1]++,win[2]--;
else win[1]--,win[2]++;
}
if(abs(a[1]-a[2])==2)
{ if(a[1]>a[2])
win[1]++,win[2]--;
else win[1]--,win[2]++;
}
}
for(i=0; i<3; i++)
printf("%d\n",win[i]);
return 0;
}
#include<iostream>
using namespace std;
int JD(int X,int Y)//判断剪刀石头布胜负的函数,胜利为1,平为0,输为-1
{
switch (X-Y) {case -1: return 1;break;
case 0: return 0;break;
case 2:return 1;break;
default :return -1;break;
}
}
int n,a,b,c,A,B,C;
int main()
{
cin>>n;
while (n--)
{
cin>>a>>b>>c;
A+=JD(a,b)+JD(a,c);
B+=JD(b,a)+JD(b,c);
C+=JD(c,a)+JD(c,b);
}
cout<<A<<B<<C;
return 0;
}