杭州电子科技大学上机题——关羽过五关斩六将
题目描述:
关羽过五关斩六将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入,关羽的武力值为x,将士武力值为y,满足(x-y)^2 +(x-y)+41 若为素数则关羽获胜,若关羽三次获胜输出WIN。若失败则输出失败的将领序号(第几关)。
算法思路:
本题主要解决两个问题:
素数的判断:在大于1的自然数中,除了1和它本身以外不再有其他因数。
判断武力值是否满足条件。
#include<iostream>
using namespace std;
bool isPrime(int num) {
if (num % 2 == 0)
return false;
for (int i = 2;i <= sqrt(num);i = i + 2) {
if (num % i == 0)
return false;
}
return true;
}
int main() {
int guanyu;
int wujiang[3];
cout << "输入关羽的武力值:";
cin >> guanyu;
while (guanyu < 0 || guanyu>50) {
cout << "输入错误,重新输入:";
cin >> guanyu;
}
for (int i = 0;i < 3;i++) {
cout << "输入武将的武力值:";
cin >> wujiang[i];
while (wujiang[i] < 0 || wujiang[i]>50) {
cout << "输入错误,重新输入:";
cin >> wujiang[i];
}
}
int result, failNum;
bool b = true;
for (int i = 0;i < 3;i++) {
result = (guanyu - wujiang[i]) * (guanyu - wujiang[i]) + (guanyu - wujiang[i]) + 41;
if (!isPrime(result)) {
failNum = i + 1;
b = false;
break;
}
}
if (b) {
cout << "WIN!" << endl;
}
else {
cout << "LOSE!" << endl;
cout << "失败在第" << failNum << "关" << endl;
}
return 0;
}
运行测试结果: