赛前看看复习的基础算法代码

1.万能头文件

复制代码

#include<bits/stdc++.h>
using namespace std;
int main(){
  
  ...
  
  return 0;
}

.2 判断素数

复制代码

int IsPrime(int n){
    for(int i=2;i<=sqrt(n+1);i++){
        if(n%i==0){
            return 0}    
    }
    return 1;     
}
/

/返回0代表不是素数,返回1代表是素数
复制代码

3 .常用math函数(使用需加头文件#include<math.h>)

1)fabs(double x)

该函数用于对double型变量取绝对值

复制代码

#include<stdio.h>
#include<math.h> 
int main(){
    double db =-12.56;
    printf("%.2f\n",fabs(db));
    return 0;
} 

//输出结果:12.56
复制代码
2)floor(double x)和ceil(double x)

这两个函数分别用于double型变量的向下取整和向上取整,返回类型为double型

复制代码


```cpp
#include<stdio.h>
#include<math.h> 
int main(){
    double db1 = -5.2, db2 = 5.2;
    printf("%.0f %.0f\n",floor(db1),ceil(db1));
    printf("%.0f %.0f\n",floor(db2),ceil(db2));    
    return 0;
} 

/*输出结果:
-6 -5
5 6*/
复制代码
3)pow(double r,double p)

该函数用于返回rp,要求r和p都是double型

复制代码

```cpp
#include<stdio.h>
#include<math.h> 
int main(){
    double db = pow(2.0,3.0);
    printf("%f\n",db);    
    return 0;
    /*int型也可以使用 
    int a=2,b=3;
    int db2 = pow(a,b);
    print("%d\n",db2)
    */
} 

/*输出结果:
8.000000
*/
复制代码
4)sqrt(double x)

该函数用于返回double型变量的算术平方根

复制代码

#include<stdio.h>
#include<math.h> 
int main(){
    double db = sqrt(2.0);
    printf("%f\n",db);
    return 0;
} 

/*输出结果:
1.414214
*/
复制代码
5)log(double x)

该函数用于返回double型变量的以自然对数为底的对数

ps:C语言中没有对任意底数求对数的函数,因此必须使用换底公式来将不是以自然对数为底的对数转换为以e为底的对数,即logab=logeb / logea。

复制代码

#include<stdio.h>
#include<math.h> 
int main(){
    double db = log(1.0);
    printf("%f\n",db);
    return 0;
} 

/*输出结果:
0.000000
*/
复制代码
6)round(double x)

该函式用于将double型变量x四舍五入,返回类型也是double型,需进行取整

复制代码

#include<stdio.h>
#include<math.h>
int main(){
    double db1 = round(3.40);
    double db2 = round(3.45);
    double db3 = round(3.50);
    double db4 = round(3.55);
    double db5 = round(3.60);
    printf("%d, %d, %d, %d, %d\n",(int)db1,(int)db2,(int)db3,(int)db4,(int)db5);
    return 0;
} 

//输出结果:3,3,4,4,4

4
.Fibonacci数列

递归法求解

复制代码


```cpp
#include<stdio.h>
#include<math.h>
int Fib(int n){
    if(n==1||n==2){
        return 1;
    }else{
        return Fib(n-1)+Fib(n-2);
    }
} 
int main(){
     int n;
     scanf("%d",&n);
     printf("%d",Fib(n));
     return 0;

概念法求解

复制代码

```cpp
#include<stdio.h>
#include<math.h>
int Fib(int n){
    int i;
    int f1 = 1;
    int f2 = 1;
    int f3 = 1;//避免判断n是否大于2 
    for(i = 2;i<n;i++)
    {
        f3 = f1 + f2;
        f1 = f2;
        f2 = f3;
    }
    return f3;
} 
int main(){
     int n;
     scanf("%d",&n);
     printf("%d",Fib(n));
     return 0;
} 

5冒泡

#include<stdio.h>
int main(){
    int a[10]={3,1,4,5,2};
    for(int i=1;i<=4;i++){//进行n-1趟比较 
        for(int j=0;j<5-i;j++){//将剩余的数进行交换,选出最大的那一个 
            if(a[j]>a[j+1]){//交换 
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    for(int i=0;i<5;i++){
        printf("%d ",a[i]);
    }
    return 0;
} 

//输出结果:1 2 3 4 5
6;.memset函数的使用

memset函数的功能是给数组中的每一个元素都赋予相同的值

使用格式:memset(数组名,值,sizeof(数组名))
7;.#include<string.h>头文件
1)strlen()

strlen函数可以得到字符数组中第一个\0前的字符的个数
int len = strlen(str1);
2)strcmp()

strcmp函数返回两个字符串大小的比较结果,比较原则是按字典序

格式:strcmp(字符数组1,字符数组2)

strcmp的返回结果:

①字符数组1<字符数组2,返回一个负整数

②字符数组1==字符数组2,返回0

③字符数组1>字符数组2,返回一个正整数
3)strcpy()

strcpy函数可以把一个字符串复制给另外一个字符串

strcpy(字符数组1,字符数组2)

4)strcat()

strcat()可以把一个字符串拼接到另一个字符串后面

格式:strcat(字符数组1,字符数组2)

注意:是把字符数组2的内容拼接到字符数组1的后面

8;
.引用传递

引用是c++中的语法,可以不通过指针就能修改传入的参数,对引用变量的操作就是对原变量的操作。使用方法:只需要在函数的参数类型后面加个&就可以了。

9;
.浮点数的比较

浮点数在计算机里的存储并不总是精确的,这种情况会给比较带来麻烦,因为在C/C++中“==”要完全相同结果才会判定为true,于是需要引用一个极小数eps来对这种误差进行修正。

经验表明,eps取10-8是一个合适的数字——对于大多数的情况既不会漏判也不会误判,所以可以将eps定义为常量1e-8:

const double eps = 1e-8;
常用的浮点数比较宏定义:

#define Equ(a,b) ((fabs((a)-(b)))<(eps)) //等于
#define More(a,b) (((a)-(b))>(esp)) //大于
#define Less(a,b) (((a)-(b))<(-esp))//小于
#define MoreEqu(a,b) (((a)-(b))>(-esp))//大于等于
#define LessEqu(a,b) (((a)-(b))<(esp))//小于等于

10 gcd lcm
代码有:

int GreatestCommonDivisor(int a, int b)

{
    int t;
    if (a < b)
    {
       temp = a;
        a = b;
        b = t;
    }    
    while (b != 0)
    {
        t = a % b;
        a = b;
        b = t;
    }
    return a;
}

求最小公倍数是可依靠最大公因数

设c是a与b的最大公因数

int LeastCommonMultiple (int a, int b)
{
    int t = a * b /c;
    return t;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值