目录
前言:在使用这些函数时可以使用万能头文件
#include<bits/stdc++.h>
一、sort()函数
作用:排序
sort(a,b,c);
a:排序数组的起始地址
b:排序数组的结束地址
c:排序条件
另:sort函数默认从小到大排序。
//输入a[i],i从1开始
for(int i=1;i<=m;i++){
cin>>a[i];
}
sort(a+1,a+m+1);
//输入a[i],i从0开始
for(int i=0;i<m;i++){
cin>>a[i];
}
sort(a+0,a+m);
1、从小到大排列
//输入a[i],将a[i]从小到大排列并输出
for(int i=0;i<m;i++){
cin>>a[i];
}
sort(a+0,a+m);
for(int i=0;i<m;i++){
cout<<a[i]<<" ";
}
2、从大到小排列
!!!一点在main之前声明bool型函数cmp,它决定了排序顺序的条件。
//在main之前写函数cmp
bool cmp(int a,int b)
{
return a>b;
}
//输入a[i],将a[i]从大到小排列并输出
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i]<<endl;
}
3、sort和结构体的联合应用
洛谷:P1093 [NOIP2007 普及组] 奖学金
#include<bits/stdc++.h>
using namespace std;
struct stu{
int num;
int c,m,e;
int sum;
}student[310];
bool cmp(stu a,stu b){
if(a.sum>b.sum){
return 1;
}else if(a.sum<b.sum){
return 0;
}else{
if(a.c>b.c){
return 1;
}else if(a.c<b.c){
return 0;
}
else{
if(a.num>b.num){
return 0;
}else{
return 1;
}
}
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
student[i].num=i;
cin>>student[i].c>>student[i].m>>student[i].e;
student[i].sum=student[i].c+student[i].m+student[i].e;
}
sort(student+1,student+1+n,cmp);
for(int i=1;i<=5;i++){
cout<<student[i].num<<' '<<student[i].sum<<endl;
}
return 0;
}
二、unique()函数
作用:去重,去除相邻元素之间重复出现的元素(一般使用前需要排序)
unique(a,b,c)-d;
a:排序数组的起始地址
b:排序数组的结束地址
c:排序条件
d:排序数组的起始地址
//输入a[i],i从1开始
for(int i=1;i<=n;i++){
cin>>a[i];
}
unique(a+1,a+n+1)-(a+1);
//输入a[i],i从0开始
for(int i=0;i<n;i++){
cin>>a[i];
}
unique(a,a+n)-(a);
洛谷:P1059 [NOIP2006 普及组] 明明的随机数
#include<bits/stdc++.h>
using namespace std;
int a[2000000],n,m;
int main()
{
cin>>m;
for(int i=0;i<m;i++){
cin>>a[i];
}
sort(a,a+m);
int t=unique(a,a+m)-a;
cout<<t<<endl;
for(int i=0;i<t;i++){
cout<<a[i]<<" ";
}
return 0;
}
三、size()、length()函数
作用:读取字符串长度
区别:size()除了可以读取字符串长度,还可以获取vector类型的长度。
#include<bits/stdc++.h>
using namespace std;
int main(){
string n;
cin>>n;
cout<<n.size();
// cout<<n.length();
return 0;
}
四、ceil()函数
作用:向上取整
五、floor()函数
作用:向下取整
六、next_permutation()函数
作用:全排列
next_permutation(a,b);
a:排序数组的起始地址
b:排序数组的结束地址
洛谷:P1706 全排列问题
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[10];
cin>>n;
for(int i=1;i<=n;i++){
a[i]=i;
}
do{
for(int i=1;i<=n;i++){
printf("%5d",a[i]);
}//五个场宽
cout<<endl;
}while(next_permutation(a+1,a+n+1));//该函数为bool型,当排列到最后一组,后面没有排列组合时返回0;
return 0;
}