Problem Description
关羽过关斩三将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入,关羽的武力值x,将士武力值为y,满足(x-y)^2+(x-y)+41若为素数则关羽获胜,若关羽三次获胜输出 WIN,若失败则输出失败的将领序号(第几关)。
Input
输入四个整数,第一个数字代表关羽的武力值,后三个代表将士的武力值。武力值的范围为(0,50),若输入超限则重新输入。
Output
关羽武力值x,将士武力值y,满足(x-y)^2+(x-y)+41为素数则关羽胜。若关羽三次获胜,输出WIN,否则输出第几个。
Sample Input
40 20 30 20
Sample Output
WIN
解题思路
- 写出判断素数的函数即可。
经验总结
- n ≤ 1的数非素数。
- 循环范围为[2,sqrt(n)]。
代码实现(C)
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
// 判断素数
bool isPrime(int n) {
if (n <= 1) return false;
int sqrtN = (int) sqrt(n);
for (int i = 2; i <= sqrtN; ++i)
if (n % i == 0)
return false;
return true;
}
int main() {
int w[4] = {0};
for (int i = 0; i < 4; ++i) {
do
scanf("%d", &w[i]);
while (w[i] <= 0 || w[i] >= 50);
}
bool win = true;
for (int i = 1; i < 4; ++i) {
int n = (int) pow((w[0] - w[i]), 2) + (w[0] - w[i]) + 41;
if (!isPrime(n)) {
win = false;
printf("%d\n", i);
break;
}
}
if (win) printf("WIN\n");
return 0;
}