每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
关羽过关斩三将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入,关羽的武力值x,将士武力值为y,满足(x-y)^2+(x-y)+41 若为素数则关羽获胜,若关羽三次获胜输出 WIN,若失败则输出失败的将领序号(第几关)。
输入格式:
四个人的武力值
输出格式:
WIN或者失败将领的序号
输入样例:
40 20 30 20
输出样例:
WIN
解决方法:
(1)算法的基本思想:
本题主要解决两个问题:
a.素数的定义:在大于1的自然数中,除了1和它本身以外不再有其他因数。
b.判断武力值是否满足条件
(2)代码实现:
#include
using namespace std;
int countNum = 1; //记录关羽过的关数
//判断武力值是否合乎标准
bool judge(int force)
{
if (force > 0 && force < 50)
return true;
return false;
}
bool isPrime(int n)
{
if (n == 1)
return false;
if (n == 2)
return true;
// 所有偶数都不是素数
if (n % 2 == 0)
return false;
// 只需要检查奇数
for (int i = 3; i < n; i += 2)
if (n % i == 0)
return false;
return true;
}
//判断是否通过当前关卡
bool passNum(int x, int y)
{
int sum = (x - y) * (x - y) + (x - y) + 41;
if (isPrime(sum))
return true;
return false;
}
int main()
{
cout << "输入关羽和将士的武力值:";
int x = 0, y1 = 0, y2 = 0, y3 = 0;
cin >> x >> y1 >> y2 >> y3;
//有一个不合乎标准则需要重新输入
while (!judge(x) || !judge(y1) || !judge(y2) || !judge(y3))
{
cout << "重新输入关羽和将士的武力值:";
cin >> x >> y1 >> y2 >> y3;
}
if (!passNum(x, y1))
{ //未通过,必须一关一关的过
cout << countNum << endl;
system("pause");
return 0;
}
countNum++;
if (!passNum(x, y2))
{
cout << countNum << endl;
system("pause");
return 0;
}
countNum++;
if (!passNum(x, y3))
{
cout << countNum << endl;
system("pause");
return 0;
}
else
cout << "WIN" << endl;
system("pause");
return 0;
}
输入N个员工,每个员工输出ID号,上班时间,下班时间,
第一行输出最早去的员工的ID和上班时间
第二行输出最迟走的员工的ID和下班时间
第三行输出工作最久的员工的ID和上班时间
输入样例:
ID100001 07:00:00 17:00:00
ID100002 08:00:00 18:00:00
ID100003 09:00:00 21:00:00
输出样例:
OPEN:ID100001, 07:00:00
CLOSE:ID100003, 21:00:00
LONGEST WORK TIME ID:ID100003, 09:00:00