函数重载:
#include <iostream>
void f(char x){
std::cout<<"2";
}
void f(bool x){
std::cout<<"1";
}
int main(){
f('A');
f(true);
}
结果2,1。;
为什么?
因为虽然以char和bool为参数的两个函数的名字但是f,
但是系统会自动识别你输入的是什么类型
函数重载中,如果实参到形参可以有多种转换
c++标准明确地规定了到底转哪个类型
但是这套明确的标注太复杂了,正常人类根本记不住
好习惯:在系统不知道转哪个类型的时候自己转
注意:自动类型转换都是在运行时转的
decltype:取一个已知值的类型并定义一个另外的值也是这个类型。
格式:decltype(已知值名称) 另外一个要定义的值
enum:枚举类型,可以自创一个类型并在里面设置它能有的值
struct创建结构体
………………一大波题目即将来临,请做好准备………………………
一,输入学生数N,每个学生的语文,数学分数
输出最高总分学生的总分
#include<iostream>
#include <algorithm>
typedef long long Int;
constexpr Int MAX_N=100;
struct Student{
Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分
};
Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩
Int N; //学生数量
bool zongfenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序
return a.zongfen<b.zongfen;
}
int main(){
std::cin>>N; //输入学生数量
for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩
std::cin>>A[i].yuwen>>A[i].shuxue;
}
for(Int i=1;i<=N;i++){ //循环计算每个学生的总分
A[i].zongfen=A[i].yuwen+A[i].shuxue;
}
std::cout<<std::max_element(A+1,A+1+N,&zongfenxiaoyu)->zongfen<<std::endl; //输出总分最高的学生的总分
}
二,输入学生数N,每个学生的语文,数学分数
输出最高总分学生的学号
#include<iostream>
#include <algorithm>
typedef long long Int;
constexpr Int MAX_N=100;
struct Student{
Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分
};
Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩
Int N; //学生数量
bool zongfenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序
return a.zongfen<b.zongfen;
}
int main(){
std::cin>>N; //输入学生数量
for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩
std::cin>>A[i].yuwen>>A[i].shuxue;
}
for(Int i=1;i<=N;i++){ //循环计算每个学生的总分
A[i].zongfen=A[i].yuwen+A[i].shuxue;
}
std::cout<<std::max_element(A+1,A+1+N,&zongfenxiaoyu)-A<<std::endl; //输出总分最高的学生学号
}
三,输入学生数N,每个学生的语文,数学分数
输出并列最高总分学生的数量
#include<iostream>
#include <algorithm>
typedef long long Int;
constexpr Int MAX_N=100;
struct Student{
Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分
};
Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩
Int N; //学生数量
Int sum=0; //定义一个变量,用于记录总分最高的学生的数量
bool zongfenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序
return a.zongfen<b.zongfen;
}
int main(){
std::cin>>N; //输入学生数量
for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩
std::cin>>A[i].yuwen>>A[i].shuxue;
}
for(Int i=1;i<=N;i++){ //循环计算每个学生的总分
A[i].zongfen=A[i].yuwen+A[i].shuxue;
}
Int zuigaozongfen=std::max_element( //找到总分最高的学生的总分
A+1,
A+1+N,
&zongfenxiaoyu
)->zongfen;
for(Int i=1;i<=N;i++){ //循环统计总分最高的学生的数量
if(A[i].zongfen==zuigaozongfen)
sum++;
}
std::cout<<sum; //输出总分最高的学生的数量
}
四,输入学生数N,每个学生的语文,数学分数
输出按语文成绩从小到大排序的每个学生的语文和数学分数
#include<iostream>
#include <algorithm>
typedef long long Int;
constexpr Int MAX_N=100;
struct Student{
Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分
};
Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩
Int N; //学生数量
Int sum=0; //定义一个变量,用于记录总分最高的学生的数量
bool yuwenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序
return a.yuwen<b.yuwen;
}
int main(){
std::cin>>N; //输入学生数量
for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩
std::cin>>A[i].yuwen>>A[i].shuxue;
}
for(Int i=1;i<=N;i++){ //循环计算每个学生的总分
A[i].zongfen=A[i].yuwen+A[i].shuxue;
}
std::sort(A+1,A+1+N,yuwenxiaoyu); //按照语文成绩从小到大排序
for(Int i=1;i<=N;i++){ //循环输出每个学生的语文和数学成绩
std::cout<<A[i].yuwen<<' '<<A[i].shuxue<<std::endl;
}
return 0;
}
五,输入学生数N,每个学生的语文,数学分数
输出按总分从小到大排序的每个学生的学号
#include<iostream>
#include <algorithm>
typedef long long Int;
constexpr Int MAX_N=100;
struct Student{
Int yuwen,shuxue,zongfen,xuehao; //定义一个学生结构体,包含语文成绩、数学成绩、总分和学号
};
Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩
Int N; //学生数量
Int sum=0;
bool yuewnxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序
return a.yuwen<b.yuwen;
}
int main(){
std::cin>>N; //输入学生数量
for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩
std::cin>>A[i].yuwen>>A[i].shuxue;
}
for(Int i=1;i<=N;i++){ //循环计算每个学生的总分
A[i].zongfen=A[i].yuwen+A[i].shuxue;
}
for(Int i=1;i<=N;i++) //循环给每个学生赋予一个学号
A[i].xuehao=i;
std::sort(A+1,A+1+N,yuewnxiaoyu); //按照语文成绩从小到大排序
for(Int i=1;i<=N;i++){ //循环输出每个学生的学号
std::cout<<A[i].xuehao<<' ';
}
return 0;
}
………………大BOSS出现……………………
输入学生数N,科目数M,每个学生的每个科目分数
输出按总分从小到大排序的每个学生的学号
#include <algorithm>
#include <iostream>
typedef long long Int;
constexpr Int MAX_N = 100,MAX_M=1000;
struct Student {
Int fenshu[1+MAX_M]; //定义一个数组,存储每个学生的每门成绩
Int zongfen,xuehao; //定义一个学生结构体,包含总分和学号
};
Student A[1 + MAX_N]; //定义一个学生数组,存储每个学生的成绩
Int N,M; //学生数量和科目数量
Int sum = 0;
bool xianyu(Student a, Student b) { //定义一个比较函数,用于排序
for(Int i=1;i<=M;i++){
if(a.fenshu[i]!=b.fenshu[i]) //如果两个学生在某一门科目上的成绩不同,就按照成绩从小到大排序
return a.fenshu[i]<b.fenshu[i];
}
return false;
}
int main() {
std::cin >> N>>M; //输入学生数量和科目数量
for (Int i = 1; i <= N; i++) {
for(Int j=1;j<=M;j++){
std::cin>>A[i].fenshu[j]; //循环输入每个学生的每门成绩
}
}
for (Int i = 1; i <= N; i++) {
A[i].zongfen=0; //初始化每个学生的总分
for(Int j=1;j<=M;j++){
A[i].zongfen+=A[i].fenshu[j]; //计算每个学生的总分
}
}
for (Int i = 1; i <= N; i++)
A[i].xuehao = i; //循环给每个学生赋予一个学号
std::sort(A + 1, A + 1 + N,xianyu); //按照成绩从小到大排序
for (Int i = 1; i <= N; i++) {
std::cout << A[i].xuehao; //循环输出每个学生的学号
}
return 0;
}