C/C++基础知识——函数

简介: C/C++基础知识——函数

1. n的阶乘

输入一个整数 n,请你编写一个函数,int fact(int n),计算并输出 nn 的阶乘。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数表示 n 的阶乘的值。

数据范围

1≤n≤10

输入样例:

3

输出样例:

6
#include<iostream>
 
using namespace std;
 
int fact(int n)
{
    if(n<=1) return n;//边界点
    n=n*fact(n-1);    //不断递归
}
int main()
{
    int n;
    cin>>n;
    cout<<fact(n)<<endl;
    return 0;
}

2.最大公约数

输入两个整数 a和 b,请你编写一个函数,int gcd(int a, int b), 计算并输出 a 和 b 的最大公约数。

输入格式

共一行,包含两个整数 a和 b。

输出格式

共一行,包含一个整数,表示 a 和 b 的最大公约数。

数据范围

1≤a,b≤1000

输入样例:

12 16

输出样例:

4
#include<iostream>
 
using namespace std;
 
int gcd(int a, int b)
{
    for(int i=1000;i>0;i--)
    if(a%i==0&&b%i==0)return i;
}
int main()
{
    int x,y;
    cin>>x>>y;
    cout<<gcd(x,y)<<endl;
    return 0;
}

输入两个整数 a 和 b,请你编写一个函数,int lcm(int a, int b),计算并输出 aa 和 bb 的最小公倍数。

输入格式

共一行,包含两个整数 a 和 b。

输出格式

共一行,包含一个整数,表示 a 和 b的最小公倍数。

数据范围

1≤a,b≤1000

输入样例:

6 8

输出样例:

24
#include<iostream>
 
using namespace std;
 
int lcm(int a,int b)
{
    for(int i=1;i<a*b;i++)
    if(i%a==0&&i%b==0)
    return i;
}
int main()
{
    int a,b;
    cin>>a>>b;
    cout<<lcm(a,b);
    return 0;
}

3.递归求斐波那契数列

请使用递归的方式求斐波那契数列的第 n项,下标从1开始。

斐波那契数列:1,1,2,3,5…,这个数列从第 3 项开始,每一项都等于前两项之和

输入格式

共一行,包含整数 n。

输出格式

共一行,包含一个整数,表示斐波那契数列的第 n 项。

数据范围

1≤n≤30

输入样例:

4

输出样例:

3
#include<iostream>
 
using namespace std;
int f(int n)
{
    if(n<=2) return 1;//边界点
    else
        return f(n-1)+f(n-2);
}
int main()
{
    int n;
    cin>>n;
    cout<<f(n);
    return 0;
}

4.数组翻转

给定一个长度为 n 的数组 aa 和一个整数 size,请你编写一个函数,void reverse(int a[], int size),实现将数组 a 中的前 size 个数翻转。

输出翻转后的数组 a。

输入格式

第一行包含两个整数 n和 size。

第二行包含n 个整数,表示数组 a。

输出格式

共一行,包含 n 个整数,表示翻转后的数组 a。

数据范围

1≤size≤n≤1000

1≤a[i]≤1000

输入样例:

1. 5 3
2. 1 2 3 4 5

输出样例:

3 2 1 4 5
#include<iostream>
 
using namespace std;
 
void reverse(int a[1010],int size)
{
    for(int i=0,j=size-1;i<j;i++,j--)
    {
        swap(a[i],a[j]);
    }
}
int main()
{
    int n,size;
    int a[1010];
    cin>>n>>size;
    for(int i=0;i<n;i++)
    cin>>a[i];
    reverse(a,size);
    for(int i=0;i<n;i++)
    cout<<a[i]<<" ";
    return 0;
}

5.数组去重

给定一个长度为 n 的数组 a,请你编写一个函数:

int get_unique_count(int a[], int n);  // 返回数组前n个数中的不同数的个数

输入格式

第一行包含一个整数 n。

第二行包含 n 个整数,表示数组 a。

输出格式

共一行,包含一个整数表示数组中不同数的个数。

数据范围

1≤n≤1000,

1≤ai≤1000。

输入样例:

5
1 1 2 4 5

输出样例:

4
#include<iostream>
 
using namespace std;
 
int sum=0;
int b[1010];
int get_unique_count(int a[1010], int n)
{
    
    for(int i=0;i<n;i++)
    {
        if(b[a[i]]==0)sum++,b[a[i]]=1;
    }
    return sum;
}
int main()
{
    int n;
    int a[1010];
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    cout<<get_unique_count(a,n);
    return 0;
}

6.跳台阶

一个楼梯共有 n 级台阶,每次可以走一级或者两级,问从第 0 级台阶走到第 n 级台阶一共有多少种方案。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示方案数。

数据范围

1≤n≤15

输入样例:

5

输出样例:

8
#include<iostream>
 
using namespace std;
int n;
int sum=0;
int k(int x)
{
    
    if(x>n)return 0;//边界点
    if(x==n)sum++;//满足条件相加
    k(x+1),k(x+2);
}
int main()
{
    
    cin>>n;
    k(0);
    cout<<sum<<endl;
    
    return 0;
}

7.二维走方格

给定一个 n×m的方格阵,沿着方格的边线走,从左上角 (0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m) 一共有多少种不同的走法。

输入格式

共一行,包含两个整数 n 和 m。

输出格式

共一行,包含一个整数,表示走法数量。

数据范围

1≤n,m≤10

输入样例:

2 3

输出样例:

10
#include<iostream>
 
using namespace std;
 
int n=0,m=0;//定义边界n和m
int sum=0;
void k(int x,int y)//递归遍历
{
    //如果同时抵达边界,则满足条件
    if(x==n&&y==m)
    {
        sum++;
    }
    else if(x<=n&&y<=m)//判断在边界内选择
    {
        k(x+1,y);//向下边界移动1,右边界不动
        k(x,y+1);//向右边界移动1,下边界不动
    }
}
int main()
{
    cin>>n>>m;
    k(0,0);//从(0,0)位置开始遍历到(n,m)
    cout<<sum;
    return 0;
}


目录
相关文章
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
79 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
37 0
C++ 多线程之线程管理函数
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
38 3
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
345 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
48 1
|
2月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
24 3
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
60 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
2月前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(二)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
3月前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
29 3
下一篇
DataWorks