目录
题目一
简要描述:输入一个数,代表要检测的例子的个数,每个例子中:
输入两个时间(格式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;
}