链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
已知石头剪刀布的规则是:布赢石头,石头赢剪刀,剪刀赢布。
每局胜者得2分,平局双方各得1分,败者不得分。
牛牛和牛妹一共玩了𝑛 n 局石头剪刀布,他们不记得每局自己出的是什么,只记得自己一共出了多少个石头、多少个剪刀、多少个布。
牛牛想知道,自己最高可能得多少分?
输入描述
第一行一个正整数n n\ n ,代表游戏的总局数。
第二行三个整数a1、b1、c1,分别代表牛牛出的石头数、剪刀数和布数。
第三行三个整数a2、b2、c2,分别代表牛妹出的石头数、剪刀数和布数。
输出描述
牛牛最高可能的得分。
样例
#include<stdio.h>
int main()
{
int ax[2][3];
int n,i,j,sum=0;
scanf("%d",&n);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&ax[i][j]);
}
}
if(ax[0][0]>=1&&ax[1][1]>=1)
{
if(ax[0][0]>=ax[1][1])
{
sum+=2*ax[1][1];
ax[0][0]=ax[0][0]-ax[1][1];
ax[1][1]=0;
}
else
{
sum+=2*ax[0][0];
ax[1][1]=ax[1][1]-ax[0][0];
ax[0][0]=0;
}
}
if(ax[0][1]>=1&&ax[1][2]>=1)
{
if(ax[0][1]>=ax[1][2])
{
sum+=2*ax[1][2];
ax[0][1]=ax[0][1]-ax[1][2];
ax[1][2]=0;
}
else
{
sum+=2*ax[0][1];
ax[1][2]=ax[1][2]-ax[0][1];
ax[0][1]=0;
}
}
if(ax[0][2]>=1&&ax[1][0]>=1)
{
if(ax[0][2]>=ax[1][0])
{
sum+=2*ax[1][0];
ax[0][2]=ax[0][2]-ax[1][0];
ax[1][0]=0;
}
else
{
sum+=2*ax[0][2];
ax[1][0]=ax[1][0]-ax[0][2];
ax[0][2]=0;
}
}
for(i=0;i<3;i++)
{
if(ax[0][i]>=1&&ax[1][i]>=1)
{
if(ax[0][i]>=ax[1][i])
{
sum+=ax[1][i];
ax[0][i]=ax[0][i]-ax[1][i];
ax[1][i]=0;
}
else
{
sum+=ax[0][i];
ax[1][i]=ax[1][i]-ax[0][i];
ax[0][i]=0;
}
}
}
printf("%d",sum);
return 0;
}
思路就是,最优解,先考虑赢的情况,后考虑平局的情况,输的不减分就不用考虑了。