任何疑问、意见、建议请留言公众号:一航代码
题目描述:
关羽过关斩三将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入,关羽的武力值x,将士武力值为y,满足(x-y)^2+(x-y)+41若为素数则关羽获胜,若关羽三次获胜输出 WIN,若失败则输出失败的将领序号(第几关)。本题主要解决两个问题:
输入格式:
输入四个整数,第一个数字代表关羽的武力值,后三个代表将士的武力值。武力值的范围为(0,50),若输入超限则重新输入。
输出格式:
关羽武力值x,将士武力值y,满足(x-y)^2+(x-y)+41为素数则关羽胜。若关羽三次获胜,输出WIN,否则输出第几个。
输入样例:
40 20 30 20
输出样例:
WIN
解决方法:
(1)代码实现:
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
//进阶版判断素数
bool isPrime(int num)
{
if (num <= 3)
{
return num > 1;
}
// 不在6的倍数两侧的一定不是质数
if (num % 6 != 1 && num % 6 != 5)
{
return false;
}
for (int i = 5; i <= sqrt(num); i += 6)
{
if (num % i == 0 || num % (i + 2) == 0)
{
return false;
}
}
return true;
}
int main()
{
int guan, em[4], lose = 0;
cin >> guan;
for (int i = 1; i <= 3; i++)
{
cin >> em[i];
}
for (int i = 1; i <= 3; i++)
{
int res = (guan - em[i]) * (guan - em[i]) + (guan - em[i]) + 41;
if (isPrime(res))
{
continue;
}
else
{
lose = i;
printf("Guan Yu lost to the No.%d enemy.", lose);
}
}
if (lose == 0)//lose没发生改变过,则三局全获胜
{
printf("WIN\n");
}
return 0;
}