1、关于返回值为浮点型的函数:
sqrt():平方根函数,函数原型为double sqrt(double),但我们通常会如“int n=sqrt(x)”——强制转换成int型,容易产生误差,所以最好使用sqrt(x+0.5)的形式。
pow():用来求 x 的 y 次幂(次方),x、y及函数值都是double型 ,其原型为:double pow(double x, double y);所以需要强制转换成int型的话,也是需要采取int n=pow(x,y)+0.5的方式。
两函数的头文件均为math.h。
2、unique(a,a+n):"删除”序列所有相邻的重复元素。其实是将重复的元素从前往后排列到无元素重复的数列后面,原数列顺序不变。例:a[8]={1,2,4,3,3,5,5,45,}; ——>{1,2,4,3,5,45,3,5}。
reverse(a,a+n):翻转函数,将整个数组倒序。
头文件:#include<algorithm>
using namespace std;
3、二分查找中的常用函数
(a[]为有序数组)
upper_bound(a,a+n,key):在数组中找到第一个大于等于值key的位置
lower_bound(a,a+n,key):在数组中找到第一个大于值key的位置
返回的是数组下标。
使用实例:
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[10];
int main(){
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
int n=upper_bound(a,a+10,8)-a;
int m=lower_bound(a,a+10,8)-a;
printf("%d %d\n",n,m);
return 0;
}
4、求数组全排列
next_permutation():求数组的下一个全排列
prev_permutation():求数组的上一个全排列
例:
do{
puts(s2);
cnt++;
}while(next_permutation(s2,s2+n));
头文件<algorithm>
5、 (1)在数据较大时,memset函数比for循环更容易出现TLE
(2)max函数最好直接对数进行比较,而不是函数