杭电2017复试上机真题

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

占位,即将更新

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值