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;
}


目录
相关文章
|
20天前
|
存储 并行计算 前端开发
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(二)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
37 1
|
20天前
|
数据安全/隐私保护 C++ 容器
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(一)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
46 0
|
22天前
|
设计模式 算法 安全
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
36 1
|
22天前
|
算法 安全 编译器
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
23 0
|
22天前
|
编译器 C++
深入理解 C++ 语法:从基础知识到高级应用
了解C++基础语法,包括`#include &lt;iostream&gt;`引入输入输出库,`using namespace std`简化命名。`int main()`是程序入口,`cout &lt;&lt; &quot;Hello World!&quot;`用于输出文本。换行可使用`\n`或`endl`。注释使用`//`进行单行注释,`/* */`进行多行注释。
23 0
|
15天前
|
存储 安全 编译器
【C++】类的六大默认成员函数及其特性(万字详解)
【C++】类的六大默认成员函数及其特性(万字详解)
31 3
|
17天前
|
安全 程序员 C++
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
96 0
|
18天前
|
算法 编译器 C++
【C++ 模板编程 基础知识】C++ 模板类部分特例化的参数顺序
【C++ 模板编程 基础知识】C++ 模板类部分特例化的参数顺序
20 0
|
19天前
|
存储 安全 编译器
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
106 0
|
19天前
|
安全 算法 编译器
【C++中的const函数】何时与如何正确声明使用C++ const函数(三)
【C++中的const函数】何时与如何正确声明使用C++ const函数
25 0