zoukankan      html  css  js  c++  java
  • NYOJ_94 cigarettes 递归VS迭代

    题目地址

    分析:

    英文题事实上看懂意思和正常的也都差点儿相同。就算有几个单词不认识也无伤大雅。

    一共同拥有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;
    }
    


    两次时间和空间利用率对照:

    能够看迭代在时间和空间利用的效率上都有提升。



  • 相关阅读:
    Redis学习小结
    抽屉模型
    用户提交数据的验证
    jsonp原理与实验
    文件上传
    项目
    CBV
    C++算法 线段树
    写一些奇怪的东西找到的奇怪的错误
    php安装过程出现的一些错误问题:
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7086566.html
Copyright © 2011-2022 走看看