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