杭州電子科技大學上機題——關羽過五關斬六將
題目描述:
關羽過五關斬六將,輸入四個人的武力值(大於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;
}
運行測試結果: