• 函数递归简单题-hdoj-2044 2018-一只小蜜蜂 母牛的故事


    题目:一只小蜜蜂

    递归做法:

    #include<cstdio>
    #include<iostream>
    #include<stdlib.h>
    #include<stack>
    #include<string>
    using namespace std;
    int cnt=0;//count
    int a,b;
    //int flag=0;
    int tran[3]={1,2};//坐标移动
    void done(int x)
    {
    	int begin=0,bet=0;
    	
    	begin=x;
    	
    	if(begin>b)return ;//越界
    	if(begin==b)
    	{
    		//cout<<"1"<<endl;
    		cnt++;
    		return ;
    	}//到达终点
    	else
    	{
    		for(int i=0;i<2;i++)
    		{
    			bet=begin+tran[i];//移动位置
    			done(bet);
    			//cout<<"2"<<endl;
    		}
    	}
    	return ;
    }
    int main()
    {
    	int n;
    	int i,j;
    	scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
        	scanf("%d%d",&a,&b);
    		
    		done(a);
    		
    		printf("%d
    ",cnt);
    		
    		cnt=0;
    		flag=0;
        }
    	
    	return 0;
    }
    

    一题递归类型的题目,比较简单。我犯了两个粗心的错误,一个是终点判断使用了a,还有一个是main函数里面的输入格式写错了...也感谢兴桔的讲解。
    贴上兴桔ppt的一部分,和函数递归的模板和深度优先搜索有关系。

    这题是规律题,用平常的递归会T,规律能看出符合斐波那契数列,所以这里给出它的做法。

    #include<stdio.h>  
    #include<string.h>  
    using namespace std;  
    int main()  
    {  
        long long int f[55];  
        f[1]=1;  
        f[2]=2;  
        for(int i=3;i<55;i++)  
        {  
            f[i]=f[i-1]+f[i-2];  
        }  
        int t;  
        scanf("%d",&t);  
        while(t--)  
        {  
            int n,m;  
            scanf("%d%d",&n,&m);  
            printf("%lld
    ",f[m-n]);  
        }  
    }  
    

    参考博客:杭电2044一只小蜜蜂

    博主的公告也很有意思:“屌丝分为两种,一种是没有梦想,浑噩一生的屌丝,另一种是怀揣着梦想,奋斗一生的屌丝。”


    题目:母牛的故事
    代码:

    #include<cstdio> 
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    int done(int x)
    {
    	int c;
    	if(x<=3) c=x;
    	else c=done(x-1)+done(x-3);
    	return c; 
    }
    int main()
    {
    	int n;
    	int tot=0;
    	while(scanf("%d",&n)!=EOF)
    	{
    		if(n==0)break;
    		tot=done(n);
    		printf("%d
    ",tot);
    		tot=0;
    	}
    	return 0;
    }
    

    解释一下递归的语句:

    int done(int x)
    {
    	int c;
    	if(x<=3) c=x;
    	else c=done(x-1)+done(x-3);
    	return c; 
    }
    

    从第n年开始往回找到第一年,前3年牛的数目是按+1的规律来递增的,当年数大于3的时候,母牛的数目等于去年的母牛数目+今年生产的母牛数,今年生产的母牛数由题意(小牛过三年能生育)等于三年前的总牛数,过了三年以后当时的牛都能生。

  • 相关阅读:
    HDU 4346 The Beautiful Road ( 反向考虑 思路题 )
    HTTP 之缓存
    HTTP head meta
    Git远程操作
    git fetch和push的区别
    git 提交 src refspec master does not match any
    git提交远程报错[rejected] master -> master (fetch first)
    (转载)git常用命令
    Git配置和常用命令
    git常用命令(三)
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5296364.html
Copyright © 2020-2023  润新知