杭电计算机2013年考研复试代码题

目录

题目一

简要描述:输入一个数,代表要检测的例子的个数,每个例子中: 
输入两个时间(格式HH:MM:SS),前面时间减去后面时间,输出在时钟上显示的时间,格式一样,
如果是以为数字的前面补零。 
#include <iostream>
#include <iomanip>
#include <string>
#include <stdlib.h>

using namespace std;

void TimeDiffer(){
	//有n个例子 
	int n;
	string t1,t2;
	int h1,m1,s1,h2,m2,s2;
	int h,m,s;
	cin>>n;
	while(n--){
		cin>>t1>>t2;
		//截取对应的时、分、秒 
		h1=atoi(t1.substr(0,2).c_str());
		m1=atoi(t1.substr(3,2).c_str());
		s1=atoi(t1.substr(6,2).c_str());
		h2=atoi(t2.substr(0,2).c_str());
		m2=atoi(t2.substr(3,2).c_str());
		s2=atoi(t2.substr(6,2).c_str());
		h=h1-h2;
		m=m1-m2;
		s=s1-s2;
		if(s<0){
		   s+=60;
		   m--; 
		}
		if(s<0){
		   s+=60;
		   m--; 
		}
		if(m<0){
		   m+=60;
		   h--; 
		}
		if(h<0){
		   h+=24;
		}
		cout<<setfill('0')<<setw(2)<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<endl;
	}
}

题目二

简要描述:一个活动有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
#include <iostream>
#include <algorithm>

using namespace std;

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

void KnowPeople(){
	int n;
	int *p=new int[n-1];
	while(cin>>n){
		//存储N-1个人认识的人数(主持人除外)
		for(int i=0;i<n-1;i++){
			cin>>p[i];
		}
		for(int i=0;i<n-1;i++){
			//将认识的人数进行降序排序
			sort(p+i,p+n-1,cmp);
			if(p[n-2]==0){
				cout<<"Lie absolutely"<<endl;
				break;
			}else if(p[i]==1){
				cout<<"Maybe truth" <<endl;
                break;
			}
			//假设当前的人认识最靠近他后面的p[j]个
			//并切掉与他们的联系(即不再认识他们)
			for(int j=1;j<p[i];j++){
				p[i+j]--;
			}
			//这样当前的人就只认识主持人了
			p[i]=1;
		}
	}
	//撤销之前开辟的空间 
	delete[] p;
}
上一篇:C++ atoi和stoi


下一篇:atoi()函数解析以及缺陷分析,以及对atoi()、atof()的改造