//函数
目录:
804. n的阶乘
814. 复制数组
815. 打印字符串
818. 数组排序
816. 数组翻转
821. 跳台阶
804. n的阶乘
输入一个整数 n,请你编写一个函数,int fact(int n)
,计算并输出n 的阶乘。
输入格式
共一行,包含一个整数 n。
输出格式
共一行,包含一个整数表示 n 的阶乘的值。
输入样例:
3
输出样例:
6
#include<bits/stdc++.h>
using namespace std;
int fact(int n)
{
if(n <= 1)return n;//保证n是个>1的数
return n*fact(n-1);
}
int main()
{
int n;
cin>>n;
cout<<fact(n);
return 0;
}
814. 复制数组
给定两个数组a 和 b 以及一个整数 size,请你编写一个函数,void copy(int a[], int b[], int size)
,将 a 数组中的前 size 个数字,复制到 b 数组中。
复制完成后,输出 b 数组。
输入格式
第一行包含整数 n,m,size,分别表示 a 数组的长度,b 数组的长度以及整数 size。
第二行包含 n 个整数,表示数组 a。
第三行包含 m 个整数,表示数组 b。
输出格式
共一行,包含m 个整数,表示复制完成后的数组b。
输入样例:
3 5 2
1 2 3
4 5 6 7 8
输出样例:
1 2 6 7 8
#include<bits/stdc++.h>
using namespace std;
void copy(int a[], int b[], int size)
{
for(int i = 0;i<size;i++)
{
b[i] = a[i];
}
}
int main()
{
int m,n,size;
cin>>n>>m>>size;
int a[n],b[m];
for(int i = 0;i < n;i++)cin>>a[i];
for(int i = 0;i < m;i++)cin>>b[i];
copy(a,b,size);
for(int i = 0;i < m;i++)
{
cout<<b[i]<<" ";
}
return 0;
}
815. 打印字符串
给定一个字符串,请你编写一个函数,void print(char str[])
,将这个字符串打印出来。
输入格式
共一行,包含一个字符串。
输出格式
共一行,表示打印出的字符串。
输入样例:
I love AcWing.
输出样例:
I love AcWing.
第一种:忽视void print(char str[])直接上string
#include<bits/stdc++.h>
using namespace std;
void print(string a)
{
for(int i = 0;a[i];i++)
{
cout<<a[i];
}
}
int main()
{
string a;
getline(cin,a);
print(a);
return 0;
}
第二种:或者用原题的办法
#include<bits/stdc++.h>
using namespace std;
void print(char str[])
{
cout<<str;
}
int main()
{
char a[101];
cin.getline(a,101);
print(a);
return 0;
}
816. 数组翻转
给定一个长度为 nn 的数组 a 和一个整数 size,请你编写一个函数,void reverse(int a[], int size)
,实现将数组 a 中的前 size个数翻转。
输出翻转后的数组 aa。
输入格式
第一行包含两个整数 n 和 size。
第二行包含 n个整数,表示数组 a。
输出格式
共一行,包含 n 个整数,表示翻转后的数组 a。
输入样例:
5 3
1 2 3 4 5
输出样例:
3 2 1 4 5
#include<bits/stdc++.h>
using namespace std;
void reverse(int a[],int size,int n)
{
for(int i = size;i >= 1;i--)cout<<a[i]<<" ";
for(int i = size+1;i <= n;i++)cout<<a[i]<<" ";
}
int main()
{
int n,size;
cin>>n>>size;
int a[n+1];
for(int i = 1;i <= n;i++)
{
cin>>a[i];
}
reverse(a,size,n);
return 0;
}
818. 数组排序
给定一个长度为 n的数组 a 以及两个整数l 和 r,请你编写一个函数,void sort(int a[], int l, int r)
,将 a[l]∼a[r] 从小到大排序。
输出排好序的数组 a。
输入格式
第一行包含三个整数 n,l,r。
第二行包含 n 个整数,表示数组 a。
输出格式
共一行,包含 n 个整数,表示排序完成后的数组 a。
输入样例:
5 2 4
4 5 1 3 2
输出样例:
4 5 1 2 3
思路:设定两个函数,a[i]和a[j],比较两者大小,a[j]表示 a[i]后一个数,如果a[j] < a[i]交换值(我们所要做的是需要将小的数排在前面,相当于冒泡排序的思想)
样例解释:5表示输入5个数,2表示下标从0开始数,数到第二个数也就是数字1为起点,然后4表示下标从0开始数,数到第四个数也就是数字2,所以就是排1,3,2这三个数
我写的代码为选择排序
#include<bits/stdc++.h>
using namespace std;
void sort(int a[], int l, int r)
{
for(int i = l;i <= r;i++)
for(int j = i+1;j <= r;j++)
if(a[j] < a[i])
swap(a[i],a[j]);
}
int main()
{
int n,l,r;
cin>>n>>l>>r;
int a[1000];
for(int i = 0;i <= n;i++)cin>>a[i];
sort(a,l,r);
for(int i = 0;i < n;i++)
cout<<a[i]<<" ";
return 0;
}
821. 跳台阶
一个楼梯共有 n 级台阶,每次可以走一级或者两级,问从第 00 级台阶走到第 n 级台阶一共有多少种方案。
输入格式
共一行,包含一个整数n。
输出格式
共一行,包含一个整数,表示方案数。
输入样例:
5
输出样例:
8
思路:看图,我们模拟一个递归搜索树
#include<bits/stdc++.h>
using namespace std;
int cnt = 0;
int n;
void fn(int k)
{
if(k == n) cnt++;
else if(k < n)
{
fn(k+1);
fn(k+2);
}
}
int main()
{
cin>>n;
fn(0);//表示Fn这个函数从0开始往下遍历
cout<<cnt<<endl;
return 0;
}
822. 走方格
给定一个 n×m的方格阵,沿着方格的边线走,从左上角 (0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m) 一共有多少种不同的走法。
输入格式
共一行,包含两个整数 n 和 m。
输出格式
共一行,包含一个整数,表示走法数量。
输入样例:
2 3
输出样例:
10
继续看图,模拟递归树
#include<bits/stdc++.h>
using namespace std;
int n,m;
int cnt = 0;
void dfs(int x,int y)
{
if(x == n && y == m)cnt++;
else
{
if(x < n) dfs(x+1,y);
if(y < m) dfs(x,y+1);
}
}
int main()
{
cin>>n>>m;
dfs(0,0);
cout<<cnt<<endl;
return 0;
}