题目:关羽过五关斩三将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入关羽的武力值为x,将士武力值为y,满足(x-y)^2 + (x-y) + 41若为素数则关羽胜,若关羽三次获胜输出WIN,若失败则输出失败的将领序号(第几关)。
#include<iostream>
using namespace std;
bool judge(int n) { // 判断战力值是否在界限内
if (n > 0 && n < 50) return true;
else return false;
}
bool IsPrime(int n) { // 判断结果是否为素数
for (int i = 2; i <= sqrt(n * 1.0); ++i) {
if (n % i == 0) return false;
}
return true;
}
int main() {
int x;
int count = 1;
int y[3] = { 0 };
cin >> x >> y[0] >> y[1] >> y[2];
while (!judge(x) || !judge(y[0]) || !judge(y[1]) || !judge(y[2])) {
cout << "武力值超出界限,重新输入:";
cin>> x >> y[0] >> y[1] >> y[2];
}
for (int i = 0; i < 3; ++i) {
if (IsPrime((x - y[i]) * (x - y[i]) + (x - y[i]) + 41)) { // 如果为素数,关羽胜,关数+1
if (count < 3) count++;
}
else break; // 如果不是素数,退出循环,此时的count值为当前关数
}
if (count == 3) cout << "WIN" << endl;
else cout << count << endl;
system("pause");
return 0;
}
输出测试:
自己写的,如有问题欢迎提问和纠正。