结构体排序
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;//结构体排序一 ----定义cmp函数
//按姓名从小到大排序,姓名一样,按年龄从小到大排序
struct student{string name; int age;
};
bool cmp(const student &s1,const student &s2){//自己定义的排序规则 if(s1.name==s2.name)return s1.age<s2.age;return s1.name<s2.name;
}
//结构体排序二 --- 结构体内重载 <
//按姓名从小到大排序,姓名一样,按年龄从小到大排序
struct student2{string name;int age;bool operator < (const student2 & s2) const {//符号重载 if(name==s2.name)return age<s2.age;return name<s2.name; }
};
int main(){//结构体数组排序一 加入cmp函数,student s[100];sort(s,s+3,cmp);//左闭右开,[0,3)的定义域//结构体数组排序二:符合重载 (不需要cmp函数)student2 s2[100]; sort(s2,s2+3);//左闭右开, [0,2)return 0;
}
【入门】遥控飞机争夺赛
题目描述
红太阳杯遥控飞机大赛拉开帷幕。比赛规则为,每位选手让自己的飞机从起点到终点飞行5次,组委会记录5次的飞行的成绩之后去掉一个最大成绩、一个最小成绩后计算剩余3个成绩的平值(平均分保留3位小数)作为该选手的最终成绩。
有n名选手参加了比赛,从键盘读入每位选手的编号以及他们的5次飞行的成绩。
请根据n名选手的比赛成绩,编程计算出冠军、亚军、季军的编号以及组委会计算出的成绩。(存在多名选手成绩正好一样,原先在前面的选择先输出)(4.1.51)
输入
第一行为一个整数n,代表参加比赛的选手数量(n>=4 && n<=100)
后面的n行,每行有6个数,第一个数是选手的编号,后5个数为选手的5次飞行的成绩
输出
3行,第一行输出冠军的编号及飞行成绩(保留3位小数)用空格隔开2个数;第二行输出亚军的编号及飞行成绩,第三行输出季军的编号及飞行成绩
样例输入
4
11 58 59 60 61 62
18 59 60 61 62 63
23 65 64 63 62 62
10 60 61 61 65 62
样例输出
23 63.000
10 61.333
18 61.000
来源/分类
二维数组 容器 结构体
#include<iostream>
#include<iomanip>
#include<queue>
using namespace std;
struct player {int num;double t_score;bool operator <(const player &a)const {return t_score<a.t_score;}
} p[105];
priority_queue<player>q;
int main() {int n;cin>>n;for(int i=1; i<=n; i++) {cin>>p[i].num; //记录编号int sum=0;int max_=0,min_=100; // 最高分、最低分for(int j=1; j<=5; j++) {int temp;cin>>temp;sum+=temp; //5个分数累加if(max_<temp) {max_=temp;} //找到最高分if(min_>temp) {min_=temp;} //找到最低分}p[i].t_score=(sum-max_-min_)/3.0; //记录最终得分q.push(p[i]); //把选手结点放入优先队列,自动按照t_score降序排列}for(int i=0; i<3; i++) {player p_temp;p_temp = q.top();q.pop();cout<<p_temp.num<<" "<<fixed<<setprecision(3)<<p_temp.t_score<<endl;}return 0;
}
【入门】求最大梯形的面积
题目描述
从键盘读入n(3<=n<=100)个梯形的上底、下底和高,请问这n个梯形中,最大面积的梯形的面积是多少?(梯形面积的求解公式为 S = (a + b) * h / 2,也就是(上底 + 下底) * 高 / 2)
输入
输出
样例输入
3
1 2 3
3 4 5
2 3 4
样例输出
17.5
来源/分类
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
struct node{int a,b,h;//上底 下底 高double s;
// bool operator < (const node &temp)const{
// return s<temp.s;
// }
}area[110];
bool cmp(node a,node b){return a.s<b.s;
}
int main(){int n;cin >> n;for(int i=0;i<n;i++){cin>>area[i].a>>area[i].b>>area[i].h;area[i].s=(area[i].a+area[i].b)*area[i].h/2.0;}
// sort(area,area+n);sort(area,area+n,cmp);cout<<fixed<<setprecision(1)<<area[n-1].s<<endl;return 0;
}
【入门】等比例缩放照片
题目描述
如图所示的一张照片(图①),可以把它的宽度或者高度减小从而减少照片的尺寸(如图②、③、④)。但只有等比例缩放的情况下照片才是最好看的,如图④;图②照片被压扁,图③照片被拉长。
图片不重要,不影响做题。
给定图片的原始尺寸以及n组要压缩的尺寸,请问哪组压缩后的数据的宽高比最接近原始数据?如果有多组压缩尺寸的宽高比都是一样的且都是最接近原始数据的,那么输出压缩后面积最小的那组数据。
输入
第1行,2个整数x和y,代表图片的原始尺寸的宽和高
第2行,一个整数n,代表接下来有n组压缩后的尺寸(n<=100)
接下来n行,每行2个数,代表n组压缩后的宽和高(确保输入的宽 >= 高)(本题所有照片的宽高均在1~10000之间)
输出
宽高比和原始图片最接近的宽高数据,如果有多组这样的数,输出面积最小的那组(不存在多组宽高比和原始数据一样接近且面积又一样的数据)
样例输入
10 4
4
20 4
60 10
15 9
10 6
样例输出
10 6
来源/分类
#include<bits/stdc++.h>
using namespace std;
struct node {int w,h;//宽 高int s;//面积double temp;//与标准比例差距bool operator < (const node &cmp)const {if(temp==cmp.temp)return s<cmp.s;else return temp<cmp.temp;}
} a[110];
int main() {int x,y;//原始尺寸cin>>x>>y;double ans=x*1.0/y;int n;cin>>n;for(int i = 0; i < n; i++) {cin>>a[i].w>>a[i].h;a[i].s=a[i].w*a[i].h;a[i].temp=fabs(1.0*a[i].w/a[i].h-ans);}sort(a,a+n);cout<<a[0].w<<" "<<a[0].h<<endl;return 0;
}