分数线划定C++

题目:


解法:

一. 下标数组:

代码:

cpp 复制代码
​
#include<bits/stdc++.h>//万能头文件
using namespace std;
int i,n,m,f,k[5001],s[5001],sub[5001];//f是分数线,sub是下标
bool cmp(int a,int b){//sort规则
    if(s[a]==s[b])return k[a]<k[b];//成绩相等比编号
    return s[a]>s[b];//否则比成绩
}
int main(){
    cin>>n>>m;
    for(i=1;i<=n;i++)cin>>k[sub[i]=i]>>s[i];//输入编号和成绩,同时初始化下标
    sort(sub+1,sub+n+1,cmp);//对下标排序
    f=s[sub[int(m*1.5)]];//算分数线
    for(i=1;s[sub[i]]>=f;i++);//算录取人数
    cout<<f<<" "<<i-1<<endl;
    for(i=1;s[sub[i]]>=f;i++)cout<<k[sub[i]]<<" "<<s[sub[i]]<<endl;//输出
}

​

二. 结构体(struct)和快排函数(sort) :

先来说说结构体:

__ 结构体 __ (struct)是c++中的一个利器,相当于自己定义一个具有多种不同元素的变量(或数组)

结构体中的变量同普通变量,都可以直接使用(只不过结构体的变量要通过"."使用

然后,这道题我们这样可以引用结构体:

cpp 复制代码
struct mark{  //表示每一个面试者
       a,h;   //a表示成绩,h表示号码;
};
mark mian[5000];  
//5000是极限数据,再提一句,也可以定义结构体数组

接着,让我们来讲一讲快排(sort) sort函数包含在STL里,引用它需要头文件algorithm

并且sort可以排序结构体数组

怎么排呢

首先我们需要一个排序的规则:

cpp 复制代码
struct mark{
       int a,h;
};//这是之前的结构体

bool cmp(mark x,mark y) 
//由此可见,结构体变量同样可以用于函数中
{
     if(x.a>y.a) return 1;//x的分数比y大,返回真
    if(x.a==y.a&&x.h<y.h) return 1;
    //x的分数与y一样,但x的号数比y小,返回真
    return 0;     //都不满足,返回假
}

注:如果cmp返回真则x在y前,返回假则y在x前

代码:

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;
struct mark{
       int a,h;
};
mark mian[5000];
bool cmp(mark x,mark y)
{
    if(x.a>y.a) return 1;
	if(x.a==y.a&&x.h<y.h) return 1;
    return 0;  
}
int main()
{
    int n,m,pass,s=0;
    cin>>n>>m; 
    //输入考试人数与预计通过人数
    
    for(int i=0;i<n;i++)
    {
        cin>>mian[i].h>>mian[i].a;
        //循环,输入考试者的成绩与号数
    }
    
    sort(mian,mian+n,cmp);     
    //根据分数与号数排序
	pass=mian[m*3/2-1].a;      //计算分数线
    for(int i=0;i<n;i++)
    {
    	if(stu[i].a>=pass) s++;//计算通过人数
	}
	
	cout<<pass<<" "<<s<<endl;
	for(int i=0;i<s;i++)        //输出通过总人数 
        cout<<mian[i].h<<"   "<<mian[i].a<<endl;
    return 0;                   //好习惯
}
相关推荐
不定积分要+C_yyy29 分钟前
Java基础核心精讲:基本数据类型与包装类区别、自动装箱拆箱与缓存陷阱实战解析
java·开发语言
xingxiliang31 分钟前
ReliableAgent:类似工程级可用的agent示例
java·开发语言·agent
buhuizhiyuci1 小时前
【python篇——一周速通python语法】python的基础语法操作
开发语言·python
郝学胜-神的一滴1 小时前
中级OpenGL教程 020:巧用数组与循环实现多点点光源渲染,告别冗余代码重构方案
c++·unity·游戏引擎·godot·图形渲染·unreal
程序猿编码1 小时前
没有AI框架,没有GPU,一个C语言文件跑通大模型
c语言·开发语言·人工智能·深度学习·ai·大模型
zmzb01031 小时前
C++课后习题训练记录Day160
开发语言·c++
沫璃染墨1 小时前
现代C++⊂C++11篇(一)列表初始化全解 & std::initializer_list
开发语言·c++
阿米亚波1 小时前
【C++ STL】std::forward_list
开发语言·c++·笔记·stl·visual studio·forward_list
buhuizhiyuci2 小时前
【python篇——一周速通python语法】python的条件语句和循环语句
开发语言·python
geovindu2 小时前
go: Recursion Algorithm
开发语言·后端·算法·golang·递归算法