又到了欢乐的游戏时间,今天小科与哥哥玩的游戏是数字卡牌游戏。游戏是这样的:
一开始小科与哥哥的手里各有一堆数字卡,数字卡上的数字范围是1到1000,一轮游戏开始时,两个人从各自的数字卡中随机各抽取一张,如果这两个数字卡上的数字是互质的,那么他们就计算出这两个数字的和,如果这两个数字不是互质的那么他们就计算出这两个数字的乘积。不管是计算出和还是计算出乘积,他们最关心的是这个计算结果是不是素数,如果是素数那么这个数就加到小科的得分中,如果不是素数那么这个数就加到哥哥的得分中。游戏结束后他们会根据得分判断输赢。
现在给出N轮游戏中小科和哥哥各自抽取的数字卡的上数字,请你帮忙计算一下他们最终的得分并判断出输赢。
输入格式
第一行,一个整数N,表示游戏的总轮数。2≤N≤100;
接下来N行,每行两个整数,分别表示第i轮游戏中小科与哥哥各自抽取的数字卡上的数字。数字卡上的数字都是1到1000之内的整数。
输出格式
输出共包含三行:
第一行,一个整数表示小科的最终得分;
第二行,一个整数表示哥哥的最终得分;
第三行输出一个字符串,如果小科得分高输出“K-win”,如果哥哥得分高输出“B-win”,如果两个人得分相同输出“Draw”
输入输出样列
输入样例1:
2
2 3
3 3
输出样例1:
5
9
B-win
输入样例2:
3
1 2
6 7
2 8
输出样例2:
16
16
Draw
思路:先求出两个数的最大公约数,如果最大公约数为1说明两个数是互质的。
根据是否互质计算出两个数的和或者是两个数的乘积。
根据计算出来的结果判断是否是素数。
#include<iostream>
#include<cstdio>
using namespace std;
bool sushu(int a) //判断是否是素数
{
for(int i=2;i*i<=a;i++)
{
if(a%i==0)
return false;
}
return true;
}
int gong(int a,int b)//求两个数的最大公约数
{
int c;
for(int i=1;i<=max(a,b);i++)
{
if(a%i==0&&b%i==0)
c=i;
}
return c;
}
int main()
{
//freopen("card.in","r",stdin);
//freopen("card.out","w",stdout);
int n;
int a,b;
long long ans;
int k=0,B=0;//k表示小科得分b表示哥哥得分,ans表示计算结果
cin>>n;
while(n--)
{
cin>>a>>b;
if(gong(a,b)==1)//判断是不是互质,如果互质求出和
{
ans=a+b;
}
else ans=a*b;//如果不是互质求出乘积
if(sushu(ans)==true)//判断结果是不是质数是质数小科得分
k+=ans;
else B+=ans;
}
if(k>B)
cout<<k<<endl<<B<<endl<<"K-win";//游戏结果输出两个人的得分
else if(k<B)
cout<<k<<endl<<B<<endl<<"B-win";
else cout<<k<<endl<<B<<endl<<"Draw";
//fclose(stdin);
//fclose(stdout);
return 0;
}
完美[嘻嘻]