目录
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;
}