强化阶段 Day 3 算法笔记 3.2 查找元素

目录

1.考试座位号

2.成绩排名

3.人口普查

4.World Cup Betting

5.Sign In and Sign Out

6.Boys vs Girls


1.考试座位号

我一开始以为14位的数字已经超过了longlong的范围,所以用字符数组来表示准考证号

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

struct{
	int x,y;
	char z[18];
}martix[1002];

int main(){
	
	int n;
	scanf("%d",&n);
	getchar();
	for(int i=0;i<n;i++){
		scanf("%s %d %d",&martix[i].z,&martix[i].x,&martix[i].y);
	}
	int m;
	scanf("%d",&m);
	int check;
	while(m--){
		scanf("%d",&check);
		for(int i=0;i<1002;i++){
			if(martix[i].x==check){
				printf("%s %d\n",martix[i].z,martix[i].y);
			}
		}
	}
	
	return 0;
}

2.成绩排名

为什么多一个getchar少一个getchar没区别?

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

struct{
	char name[12];
	char id[12];
	int grade;
}stu[101];

int main(){
	
	int n;
	scanf("%d",&n);
	int max_ans=-1,index1,min_ans=101,index2;
	for(int i=0;i<n;i++){
		scanf("%s %s %d",&stu[i].name,&stu[i].id,&stu[i].grade);
//		getchar();
		if(stu[i].grade>max_ans){
			max_ans = stu[i].grade;
			index1 = i;
		}
		if(stu[i].grade<min_ans){
			min_ans = stu[i].grade;
			index2 = i;
		}
	}
	
	printf("%s %s\n",stu[index1].name,stu[index1].id);
	printf("%s %s\n",stu[index2].name,stu[index2].id);
	
	return 0;
}
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

struct{
	char name[12];
	char id[12];
	int grade;
}stu[101];

int main(){
	
	int n;
	scanf("%d",&n);
	int max_ans=-1,index1,min_ans=101,index2;
	for(int i=0;i<n;i++){
		scanf("%s %s %d",&stu[i].name,&stu[i].id,&stu[i].grade);
		getchar();
		if(stu[i].grade>max_ans){
			max_ans = stu[i].grade;
			index1 = i;
		}
		if(stu[i].grade<min_ans){
			min_ans = stu[i].grade;
			index2 = i;
		}
	}
	
	printf("%s %s\n",stu[index1].name,stu[index1].id);
	printf("%s %s\n",stu[index2].name,stu[index2].id);
	
	return 0;
}

3.人口普查

注意如果所有的日期都不合格,就得特判;

我这里面是把日期折算成数字进行判断前后,其实也可以用另外一个结构体

 

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int e=1814*360+9*30+6;
int l=2014*360+9*30+6;
int temp;

struct{
	char name[7];
}martix[100002];

bool judge(int y,int m,int d){
	temp=y*360+m*30+d;
	if(temp>=e&&temp<=l){
		return true;
	}
	return false;
}

int main(){
	
	int n;
	scanf("%d",&n);
	int year,month,day;
	int max_=-1,index1,min_=100000000,index2;
	int count=0;
	for(int i=0;i<n;i++){
		scanf("%s %d/%d/%d",&martix[i].name,&year,&month,&day);
		if(judge(year,month,day)){
			count++;
			if(temp>max_){
				max_=temp;
				index1=i;
			}
			if(temp<min_){
				min_=temp;
				index2=i;
			}
		}
	}
	
	if(count==0){
		printf("0");
	}else{
		printf("%d %s %s",count,martix[index2].name,martix[index1].name);
	}
	return 0;
}

4.World Cup Betting

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int get_index(double x,double y,double z){
	if(x>y&&x>z) return 0;
	else if(y>z&&y>z) return 1;
	else if(z>y&&z>x) return 2;
}

int main(){
	
	char s[3] = {'W','T','L'};
	double martix[4];
	int index;
	double p=1;
	int ans[3]={0};
	for(int i=0;i<3;i++){
		scanf("%lf %lf %lf",&martix[0],&martix[1],&martix[2]);
		index = get_index(martix[0],martix[1],martix[2]);
		p*=martix[index];
		ans[i] = index;
	}
	for(int i=0;i<3;i++){
		printf("%c ",s[ans[i]]); 
	}
	printf("%.2lf",(p*0.65-1)*2);

	return 0;
}

5.Sign In and Sign Out

我自己测试样例可以通过,不知道为什么pat上面一个都无法通过

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

struct{
	char name[17];
}stu[10000002];

int main(){
	
	int n;
	scanf("%d",&n);
	int h,m,s;
	int max_=-1,index1=0,min_=100000004,index2=0;
	int e,l;
	for(int i=0;i<n;i++){
		scanf("%s %d:%d:%d",&stu[i].name,&h,&m,&s);
		int e = h*3600+m*60+s;
		if(e<min_){
			min_=e;
			index2=i;
		}
		scanf("%d:%d:%d",&h,&m,&s);
		int l = h*3600+m*60+s;
		if(l>max_){
			max_=l;
			index1=i;
		}
	}
	printf("%s %s",stu[index2],stu[index1]);
	
	return 0;
}

这一种方法更好,开三个结构体,一个temp,一个开门时间,一个关门时间。

6.Boys vs Girls

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

struct{
	char name[15];
	int grade;
	char cou[15];
}temp,man,fman;

int main(){
	
	int min_ = 101,max_=-1;
	int n;
	scanf("%d",&n);
	char gender;
	for(int i=0;i<n;i++){
		scanf("%s %c %s %d",&temp.name,&gender,&temp.cou,&temp.grade);
		if(gender=='M'){
			if(temp.grade<min_){
				min_=temp.grade;
				man=temp;
			}
		}else{
			if(temp.grade>max_){
				max_=temp.grade;
				fman=temp;
			}
		}
	}
	if(max_==-1) printf("Absent\n");
	else printf("%s %s\n",fman.name,fman.cou);
	if(min_==101) printf("Absent\n");
	else printf("%s %s\n",man.name,man.cou);
	if(max_==-1||min_==101) printf("NA\n");
	else printf("%d\n",fman.grade-man.grade);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aixiaoxiao13/article/details/121733117