因为递归算是很重要的一环,所以我就没把所有代码放出来,能独立完成递归才是你进来这篇文章的目的,希望你能看到最后(大佬就不用看了)
描述 |
---|
通过重载函数(overloaded function),实现计算两点之间的距离。 第一个重载接受4个int类型参数,把前两个参数看成一个点的坐标,后两个参数看成另一个点的坐标,函数返回两点之间的距离(浮点数)。 第二个重载接受4个double类型参数,把前两个参数看成一个点的坐标,后两个参数看成另一个点的坐标,函数返回两点之间的距离(浮点数)。 主函数中分别输入两组值,调用函数输出结果。 |
输入 |
一共有8个数字。 首先是四个浮点数a、b、c、d 然后是四个整数e、f、g、h |
输出 |
先输出点(a,b)到点(c,d)的距离,换行。 然后输出点(e,f)到点(g,h)的距离,换行。 输出结果与标准答案相差0.001之内即可。 |
样例输入 复制样例 |
1.5 3.5 5.5 7.5 3 4 5 6 |
样例输出 |
5.65685 2.82843 |
HINT |
关键
template
double f(T a,T b,T c,T d)
{
double n=(a-c)*(a-c)+(b-d)*(b-d);
n=sqrt(n);
cout<
描述 |
---|
通过重载函数(overloaded function),返回两个数字的相减结果。 第一个重载接受2个int类型参数,函数返回两个数字的相减结果(整数)。 第二个重载接受2个double类型参数,函数返回两个数字的相减结果(浮点数)。 主函数中分别输入两组值,调用函数输出结果。 |
输入 |
一共有4个数字。 首先是两个浮点数a、b 然后是两个整数c、d |
输出 |
先输出a-b的值,换行。 然后输出c-d的值,换行。 |
样例输入 复制样例 |
3.5 2.3 3 1 |
样例输出 |
1.2 2 |
HINT |
关键:
template
T f(T a,T b)
{
return a-b;
}
描述 |
---|
通过重载函数(overloaded function),返回三个参数中较大的参数。 第一个重载接受2个int类型参数,函数返回三个数字中较大的数(整数)。 第二个重载接受2个double类型参数,函数返回三个数字中较大的数(浮点数)。 主函数中分别输入两组值,调用函数输出结果。
|
输入 |
一共有6个数字。 首先是三个浮点数a、b、c 然后是三个整数d、e、f |
输出 |
先输出a、b、c的最大值,换行。 然后输出d、e、f的最大值,换行。 可能需要嵌套调用函数。 |
样例输入 复制样例 |
1.5 2.5 3.5 3 2 1 |
样例输出 |
3.5 3 |
HINT |
|
关键:
template
T ff(T a,T b,T c)
{
T max;
if(a>b) max=a;
else max=b;
if(c>max) max=c;
return max;
}
描述 |
---|
m块饼每天吃1块或者2块,吃到完为止。问有多少种不同的吃法。注意:第1天吃2块第2天吃1块和第1天吃1块第2天吃2块,是两种不同的吃法。 |
输入 |
一个正整数n,表示n组案例。 每组案例由一个正整数m构成。(m<=20) |
输出 |
针对每组案例,输出共有多少种吃完的方法。 每组案例输出完都要换行。 |
样例输入 复制样例 |
1 10 |
样例输出 |
89 |
HINT |
解:一题基础递归,要搞清楚结束递归的条件,和递归里面的内容(毕竟每次都是调用该函数) ,如果递归有出现错误,请手动计算每次递归程序的结果进行比较,不要和我一样做懒狗。
关键:
int ts(int a,int b)
{
//cout<=0)
ts(a-1,1);
if(a-2>=0)
ts(a-2,2);
}
}
可以看到被我注释掉的输出,就是用来除错的
描述 |
---|
m块饼每天吃2块或者3块(注意:不能吃1块),吃到完为止。问有多少种不同的吃法。 |
输入 |
一个正整数n,表示n组案例。 每组案例由一个正整数m构成。(m<=20) |
输出 |
针对每组案例,输出共有多少种吃完的方法。 每组案例输出完都要换行。 |
样例输入 复制样例 |
1 10 |
样例输出 |
7 |
HINT |
基本和4没区别
关键:
int ts(int a,int b)
{
//cout<=0)
ts(a-2,2);
if(a-3>=0)
ts(a-3,3);
}
}
描述 |
---|
m块饼分p天吃完,每天吃1块或者2块。问有多少种不同的吃法。 |
输入 |
一个正整数n,表示n组案例。 每组案例由两个正整数m和p构成。(m<=20,p<=20) |
输出 |
针对每组案例,输出共有多少种吃完的方法。 每组案例输出完都要换行。 |
样例输入 复制样例 |
1 10 7 |
样例输出 |
35 |
HINT |
比起4、5更有难度
关键:
int Sum=0,st=0;
int ts(int a,int b,int p)
{
//cout<=0)
{
st++;
ts(a-1,1,p);
}
if(a-2>=0)
{
st++;
ts(a-2,2,p);
}
}
if(b!=0)
{
st--;return 0;
}
}
描述 |
---|
编写递归函数将输入的整数逐个数字输出。如输入12345,输出1 2 3 4 5,每个数字之间用空格隔开。 |
输入 |
一个正整数n,表示n组案例。 每组案例由一个正整数m构成。 |
输出 |
针对每组案例,将输入的整数逐个数字输出,每个数字之间用空格隔开,最后一位数字后面没有空格。 每组案例输出完都要换行。 |
样例输入 复制样例 |
1 12345 |
样例输出 |
1 2 3 4 5 |
HINT |
关键:
int t;
int f(int a,int b)
{
if(b==0) return 0;
int c=pow(10,b-1);
if(b==t)
{
cout<>m;
int p=m;
for(int j=1;;j++)
{
p=p/10;
if(p==0)
{
t=j;
break;
}
}
描述 |
---|
编写递归函数将输入的整数逐个数字反序输出。如输入12345,输出5 4 3 2 1,每个数字之间用空格隔开。 |
输入 |
输出 |
针对每组案例,将输入的整数逐个数字反序输出,每个数字之间用空格隔开,最后一位数字后面没有空格。 每组案例输出完都要换行。 |
样例输入 复制样例 |
1 12345 |
样例输出 |
5 4 3 2 1 |
HINT |
关键:
int f(int a)
{
if(a==0)
{
cout<
描述 |
---|
编写递归函数将输入的整数逐个数字输出,每个数字之间用空格隔开,并且数字为几就应该有几个空格。 例如输入12345,则输出1 2 3 4 5 ,其中1后面有1个空格,2后面有2个空格,…,5后面有5个空格。 |
输入 |
一个正整数n,表示n组案例。 每组案例由一个正整数m构成。 |
输出 |
针对每组案例,将输入的整数逐个数字输出,每个数字之间用空格隔开,并且数字为几就应该有几个空格。 每组案例输出完都要换行。 |
样例输入 复制样例 |
1 12345 |
样例输出 |
1 2 3 4 5
|
HINT |
关键:
int f(int a,int b)
{
if(a==0) return 0;
else
{
int c=pow(10,b+1);
b--;
cout<
--------------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- ---------------------------------------------------------
这边展示第四题简化的代码
#include
using namespace std;
int f(int m)
{
int x;
if(m<0) return 0;
if(m==0) return 1;
else x=f(m-1)+f(m-2);
return x;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int m;
cin>>m;
cout<