分析:
递归是自己写的,迭代是最优程序的解法。英文题其实看懂意思和正常的也都差不多,就算有几个单词不认识也无伤大雅。
一共有n支烟,每天抽k支。
每抽完k支,会得到一只。
a组数据。
输入n k的个数,输出一共抽了多少烟。
思路:
用递归,递归成功的次数,就是多出来的烟的数目。
+n输出即可。
#include<iostream>
using namespace std;
int daybyday(int n,int k) //计算多出来的烟的数目,或者说 多 抽了多少天
{
if(n/k<1) //当前的烟不够抽完一天
return 0;
else
return daybyday(n-k+1,k)+1;
}
int main()
{
int a;
int n,k;
cin>>a;
while(a--)
{
cin>>n>>k;
// cout<<daybyday(n,k)+n<<endl; 递归
//迭代
int sum=n;
while(n/k)
{
sum+=n/k; //更新sum 原来的n加上多出来的天数
n=n/k+n%k; //更新n
}
cout<<sum<<endl;
}
return 0;
}
两次时间和空间利用率对比:
可以看迭代在时间和空间利用的效率上都有提升。