PAT (Basic Level) Practice (中文)1015 德才论 (25 分)

/*
重点:
	1.读题先明白需要啥读了一边,你知道是排序题,
	而且你还需要一个结构体,所以呢你需要掌握排
	序sort的使用(还有cmp(是一个决定如何比较的函数)),
	还要掌握如何给结构体中的元素排序,这是重难点。
	2.分析题目要求,就是该怎么分类排序 
先分类别:
		1.德才都超 H 线 >=  按总分排序 
		2.德到才不到 也按总分排序
		3.德才都不到 但德分大于才分 也按总分排序
		4.其他到达录取线 也按总分排序 
	3.机智点:就是他让我们返回那个符合的人数,用
	total--很机智嘿嘿
	4.需要看输入输出案例,里面会有隐藏信息 
*/
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
struct node{
	int num,de,cai;
};
bool cmp(node a,node b){//这个是排序要求,文章后会详细介绍它的原理 
	if((a.cai+a.de)!=(b.cai+b.de))
		return (a.cai+a.de)>(b.cai+b.de);
	else if(a.de!=b.de)
		return a.de>b.de;
	else
		return a.num<b.num;
}
int main(){
	int n,l,h;
	cin>>n>>l>>h;
	node temp;
	vector<node> v[4];//这个很关键的,它将符合要求的放在一起便于我们去处理 
	int total=n;
	for(int i=0;i<n;i++){
		scanf("%d%d%d",&temp.num,&temp.de,&temp.cai);
		if(temp.cai<l||temp.de<l)
			total--;
		else if(temp.cai>=h&&temp.de>=h)
			v[0].push_back(temp);//STL中的 文章末尾会提到它的作用和如何使用 
		else if(temp.cai<h&&temp.de>=h)
			v[1].push_back(temp);
		else if(temp.cai<h&&temp.de<h&&temp.de>=temp.cai)
			v[2].push_back(temp);
		else
			v[3].push_back(temp); 
	}
	printf("%d\n",total);
	for(int i=0;i<4;i++){
		sort(v[i].begin(),v[i].end(),cmp);//排序题必不可缺 
		for(int j=0;j<v[i].size();j++){
			printf("%d %d %d\n",v[i][j].num,v[i][j].de,v[i][j].cai);
		}
	}
	return 0;
}

芝士++

1.sort()函数

        1)Sort函数包含在#include<algorithm>的c++标准库中

        2)Sort函数有三个参数

                i)第一个是要排序的数组的起始位置

                ii)第二个是要排序的数组的结束位置

                iii)第三个是排序的方法,升序还是降序……也就是下面说的cmp

        总结起来就是:sort(begin,end,排序方法)

2.cmp

        1)手写排序顺序

bool cmp(int a,int b){
    return a>b;//从大到小排序
}

bool cmp(int a,int b){
    return a<b;//从小到大排序
}

        2)当然你可以用c++标准库中的函数了

        less<数据类型>();//从小到大排序

        greater<数据类型>();//从大到小排序

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a;
	vector<int> v;
	for(int i=0;i<n;i++){
		cin>>a;
		v.push_back(a);
	}
	sort(v.begin(),v.end(),less<int>());
	cout<<"经过less<int>()排序标准后:"; 
	for(int i=0;i<n;i++){
		cout<<v[i]<<'\t';
	}
	cout<<endl;
	sort(v.begin(),v.end(),greater<int>());
	cout<<"经过greater<int>()排序后 :";
	for(int i=0;i<n;i++){
		cout<<v[i]<<'\t';
	}
}

3.vector 

vector函数的头文件是#include<vector>

介绍:在c++中,vector是一个十分有用的容器。

作用:它能够像容器一样存放各种类型的对象。简单说,vector是一个能够存放任意类型的

动态数组,能够增加和压缩数据。

注意:vector作为函数的参数或者返回值时注意他的写法:

        int fun(vector<int>&a,vector<int>&b) 其中的&绝对不能丢!!!

        1)基本操作

                头文件 #include<vector>

                创建vector对象 vector<int>vec;

                尾部插入数字vec.push_back(a);

                使用下标访问元素 cout<<vec[0]<<endl;

                使用迭代器访问元素 vector<int>::iterator it;

                        for(it=vec.begin();it!=vec.end();it++)

                                cout<<*it<<endl;

                插入元素: vec.insert(vec.begin()+i,a);//在第i+1个元素前面插入a

                删除元素:vec.erase(vec.begin()+i,vec.end+j);//删除区间[i,j-1];

                数组大小(不那么准确):vec.size();

                清空 vec.clear();

       2)算法

                头文件 #include<algorithm>

                使用reverse(vec.begin(),vec.end());//将元素翻转,逆序排列

                使用sort排序sort(vec.begin(),vec.end());//默认升序

vector<int>test;
//建立一个vector,int 为数组元素的数据类型,test为动态数组名
//简单的用法

#include<vector>
#include<iostream>
using namespace std;
int main(){
    vector<int>test;
    test.push_back(1);
    test.push_back(2);
//作用是:test[0]=1;test[1]=2;
}

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值