ps:题是别的地方copy过来的,代码是自己的
第一题:
关羽过关斩三将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入,关羽的武力值x,将士武力值为y,满足(x-y)^2+(x-y)+41 若为素数则关羽获胜,若关羽三次获胜输出WIN,若失败则输出失败的将领序号(输入输出我自己加上去的)
输入:
49
30 //结果421 关羽胜
20 //结果911 关羽胜
5 //结果2021 关羽败
输出:
1
2
#include<stdio.h>
#include<math.h>
bool judge(int num){ //判断素数
int flag = 0;
for(int i = 2;i <= (int)sqrt((double)num);i++){ //讨论 2~sqrt(num)之前是否整除
if(num % i == 0){
flag = 1;
break;
}
}
if(flag){
return false;
}
else{
return true;
}
}
int main(){
int guan;
int em[3];
scanf("%d",&guan);
for(int i = 0;i < 3;i++){
scanf("%d",&em[i]);
}
for(int i = 0;i < 3;i++){
int con = (guan - em[i]) * (guan - em[i]) + (guan - em[i]) + 41;
if(judge(con)){
printf("%d\n",i + 1);
}
else{
continue;
}
}
return 0;
}
第二题:
输入N个员工,每个员工输出ID号,上班时间,下班时间,第一行输出最早去的员工的ID和上班时间第二行输出最迟走的员工的ID和下班时间第三行输出工作最久的员工的ID和上班时间(数据瞎编的)
sampleinput: //默认没有加班到第二天凌晨的
3
100001 07:00:00 17:00:00
100002 08:00:00 18:00:00
100003 09:00:00 21:00:00
sampleout:
100001 07:00:00
100003 21:00:00
100003 12:00:00
#include<cstdio>
#include<algorithm>
using namespace std;
struct employee{
char id[20];
int ts,te; //用int型存储时间,单位为秒,方便计算
};
bool cmp1(employee a,employee b){ //最早上班
if(a.ts < b.ts){
return true;
}
else{
return false;
}
}
bool cmp2(employee a,employee b){ //最晚下班
if(a.te > b.te){
return true;
}
else{
return false;
}
}
bool cmp3(employee a,employee b){ //时间最长
int dura = a.te - a.ts;
int durb = b.te - b.ts;
if(dura > durb){
return true;
}
else{
return false;
}
}
int main(){
int num;
scanf("%d",&num);
employee* e = (employee*)malloc(sizeof(employee) * num);
for(int i = 0;i < num;i++){
scanf("%s",&(e + i)->id);
int sh,sm,ss,eh,em,es;
scanf("%d:%d:%d %d:%d:%d",&sh,&sm,&ss,&eh,&em,&es);
(e + i)->ts = sh * 60 * 60 + sm * 60 + ss;
(e + i)->te = eh * 60 * 60 + em * 60 + es;
}
sort(e,e + num,cmp1);
int th = e->ts / 3600;
int tm = (e->ts % 3600) / 60;
int ts = (e->ts % 3600) % 60;
printf("%s %02d:%02d:%02d\n",e->id,th,tm,ts);
sort(e,e + num,cmp2);
th = e->te / 3600;
tm = (e->te % 3600) / 60;
ts = (e->te % 3600) % 60;
printf("%s %02d:%02d:%02d\n",e->id,th,tm,ts);
sort(e,e + num,cmp3);
int dur = e->te - e->ts;
th = dur / 3600;
tm = (dur % 3600) / 60;
ts = (dur % 3600) % 60;
printf("%s %02d:%02d:%02d\n",e->id,th,tm,ts);
return 0;
}
第三题:
有一个M*N的材料和一个S*T的模板,从材料中切除模板,求最大能切出来的模板的数量。
sample input:
3 4
a a b a
a b a b
b a b a
2 2
a b
b a
sample out:
2
Loading
占位,即将更新