“斗牛”是一种简单的纸牌游戏,玩法如下:对于一副扑克牌,保留A(作为1)、2~10这些牌面的牌;然后每人发5张牌,计算出是牛几(任取3张牌面累加凑成10的倍数,设剩下2张牌面加起来的和S,若S为10的倍数则为双牛,否则用S(S小于10的情况)或用S减去10(S大于10的情况)的结果确定,例如,牌面4 3 4 6 10时,为牛7),然后比谁的牛大,大者胜,小者负,否则为和局。现在给你5张牌,请你算出是牛几。
输入格式:
首先输入一个整数T(1<=T<20),表示测试组数。 每组测试输入5个整数(范围为1到10,可以重复,其中1表示牌面为A),数据之间以一个空格分隔。
输出格式:
对于每组测试,在一行上输出一个整数表示牛几,若双牛则输出10,若无牛则输出0。
输入样例:
2
8 1 4 6 7
4 3 4 6 10
输出样例:
0
7
两种方法实现:
第一种:
#include <stdio.h>
int main()
{
//T为测试组数,每组测试输入5个整数;若双牛则输出10,若无牛则输出0。
int T,niu[60],sum=0;
int i,j,x,y,z,flag,k,sun[20];
scanf("%d",&T);
for(i=0;i<T;i++)
{ sun[i]=0;
for(j=0;j<5;j++)
{
//随机三个数为求和;
scanf("%d",&niu[j+i*5]);
sun[i]+=niu[j+i*5];
}
}
for(i=0;i<T;i++)
{ flag=1;
k=0;
for(x=0; x<3 && flag ;x++)
{
for(y=x+1;y<4 && flag;y++)
{
for(z=y+1;z<5;z++)
{
sum=niu[x+i*5]+niu[y+i*5]+niu[z+i*5];
if(sum%10==0)
{
flag=0;
k=sun[i];
k-=sum;
break;
}
}
}
}
printf("%d\n",k);
}
}
第二种:
#include <stdio.h>
#define CARD_COUNT 5
void checkCard(int* arr,int len) {
int sum = 0;
for (int i = 0; i < len; ++i) {
sum += arr[i];
}
for(int x = 0; x < len; ++x) {
for(int y = x+1; y < len; ++y) {
for(int z = y+1;z < len; ++z) {
if((arr[x]+arr[y]+arr[z])%10 == 0) {
printf("%d\n", sum%10 == 0 ? 10 :sum%10);
return;
}
}
}
}
printf("%d\n",0);
}
int main()
{
//T为测试组数,每组测试输入 CARD_COUNT 个整数;若双牛则输出10,若无牛则输出0。
int T,bull[CARD_COUNT];
scanf("%d",&T);
for(int i=1; i<=T; ++i) {
for(int j=0; j<CARD_COUNT; ++j) {
scanf("%d",&bull[j]);
}
checkCard(bull, CARD_COUNT);
}
return 0;
}
错误方法:
#include <stdio.h>
int main()
{
//T为测试组数,每组测试输入5个整数;若双牛则输出10,若无牛则输出0。
int T,niu[60],sum=0;
int x,y,z;
scanf("%d",&T);
for(int i=1;i<=T;i++)
{
for(int j=0;j<5;j++)
{scanf("%d",&niu[j]);
//随机三个数为求和;
for(x=0;x<5;x++)
for(y=x+1;y<5;y++)
for(z=y+1;z<5;z++)
{sum=niu[x]+niu[y]+niu[z];
if(sum%10==0)
{niu[x]=0;niu[y]=0;niu[z]=0;
for(int i=0;i<5;i++)
{sum+=niu[i];
if(sum%10==0) {printf("10\n");return 0;}
else {printf("%d\n",sum%10);return 0;}}
}
else {printf("0\n");return 0;}
}
}
}
}