猴子第一天摘下若干个桃子,当即吃了2/3,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉2/3,又多吃了一个。以后每天早上都吃了前一天剩下的2/3再多一个。到第n天早上想再吃时,发现只剩下k个桃子了。求第一天共摘了多少桃子。
(这题看到就是考递归的思路,递归是大大的好)
思路:设前一天个数为x,今天个数为n,则n=x-2/3*x-1,即x=3n+3。
输入格式
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组数据输入2个正整数n,k(1≤n,k≤15)。
输出格式
对于每组测试数据,在一行上输出第一天共摘了多少个桃子。
输入样例
2 2 1 4 2
输出样例
6
93
代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
code演示
#include <iostream>
#include <cstdio>
using namespace std;
int first(int m,int n)//递归函数,每次接受天数m和剩余个数n
{
if(m==1) return n;//如果天数为1就返回剩下个数就是第一天个数
else return first(m-1,n=3*(n+1));//如果天数不是1就返回天数-1和当天剩余个数
}
int main()
{
int t;
cin>>t;//输入一个循环次数就不说了
int m,n;
while(t--)
{
cin>>m>>n;
cout<<first(m,n)<<endl;//直接输出结果并换行
}
return 0;
}
俗话说迭代是人,递归是神。
结果展示
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行
老规矩结尾水字数 ,刷10行