欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

杭电2013复试上机真题

程序员文章站 2022-05-16 21:58:47
...

ps:题是别的地方copy过来的,代码是自己的

第一题:

输入一个数,代表要检测的例子的个数,每个例子中: 
输入两个时间(格式HH:MM:SS),前面时间减去后面时间,输出在时钟上显示的时间,格式一样,2位不够数字前面补零。

没看到原题,按24小时制算

#include<stdio.h>

int main(){
	int n;
	int h1,m1,s1;
	int h2,m2,s2;
	
	scanf("%d",&n);
	while(n--){
		scanf("%d:%d:%d",&h1,&m1,&s1); //被减数 
		scanf("%d:%d:%d",&h2,&m2,&s2); //减数 
		
		int rh,rm,rs;
		if(s1 - s2 < 0){
			m1--;
			rs = s1 + 60 - s2;
		}
		else{
			rs = s1 - s2;
		}
		
		if(m1 - m2 < 0){
			h1--;
			rm = m1 + 60 - m2;
		}
		else{
			rm = m1 - m2;
		}
		
		if(h1 - h2 < 0){//小时不够减,被减数默认为第二天时间 
			rh = h1 + 24 - h2;
		}
		else{
			rh = h1 - h2;
		}			
		printf("%02d:%02d:%02d\n",rh,rm,rs); 
	}	
	return 1;
}

第二题:

一个活动有N个人参加,一个主持人和N-1个普通参加者,其中所有的人都认识主持人,主持人也认识所有的人,主持人要求N-1个参加者说出他们在参加者中所认识的人数,如果A认识B,则B认识A,所以最少是会认识一个人,就是主持人,他们说出了自己所认识的人数后,需要判断他们中有没有人说谎。 

输入: 

第一行是N,N=0表示结束 

第二行是N-1个数字 

输出: 

Lie absolutely 或者 Maybe truth 

1 2 4 5 5 3

 

3 7 7 7 7 5 6 6 

两个测试例子中第一个是Lie absolutely,第二个是Maybe truth 

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;

bool cmp(int a,int b){
    return a > b;
}

int main(){
	int nums;
	scanf("%d",&nums);
	while(nums != 0){
		int* a;
		a = (int*)malloc(sizeof(int)*(nums - 1));
		for(int i = 0;i < nums - 1;i++){
			scanf("%d",(a + i));
			*(a + i) -= 1; //手动除去主持人 
		}
		sort(a,a + nums - 1,cmp);
		
		//以 5 5 4 3 2 1 举例子,把每个人看成一个无向图中的结点,每个结点的度代表这个结点认识的人,很明显第一个结点的度不可能大于5,而等于五说明他认识其余所有人
		//当第一个人为5时,就说明其余人至少为1,而判断第二人时,除去认识第一个人,他还认识4个人,就说明后边的其余的人至少为2,这与已知条件不符,所以有人说谎了
		
		int flag = 0;
		for(int i = 0;i < nums - 2;i++){
			for(int j = 0;j < *(a + i);j++){
				a[i + 1 + j]--;
				if(a[i + 1 + j] < 0){
					flag = 1;
					break;
				}
			}
			if(flag){
				printf("Lie absolutely\n");
				break;
			}
		}
		
		if(!flag){
			printf("Maybe truth\n");
		} 				
		scanf("%d",&nums);
	} 
	return 1;
}

 

相关标签: 考研