杭电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
7
1 2 4 5 5 3
9
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;
}
上一篇: 杭电2010复试上机真题
下一篇: 2020吉大计算机考研回忆题