• 当前位置:首页>>C语言>>C语言编程实例>>卖桃子
  • 卖桃子
  •                   

                                             卖桃子

     问题:

         一筐桃子,第一天买掉一半又吃掉一个;第二天买掉余下的一半又吃掉一个;

         第三天,第四天,第五天以后都照此办理,最后剩下1个,问筐中共有多少个桃子.

     解答:

        用递归的方法求解,源程序如下:

      #include <iostream.h>
      void main()
      {
         int i,remaining=1,day;
       cout<<"请输入卖桃子的天数:"<<endl;
        cin>>day;
        cout<<endl;
        for(i=1;i<=day;i++)
       {
        remaining=2*remaining+2;
       }
        cout<<"原有桃子的总数为:"<<endl;
        cout<<remaining<<endl;
      }

     另外一个相似的问题:

                           递推捕鱼的问题

    问题:
    A,B,C,D,E合伙夜间捕鱼,凌晨是都疲惫不堪,各自啊在河边的树丛中找地方睡着了。
    日上三竿,A第一个醒来,他将鱼平分为5分,把多余的一条扔回湖中,拿自己的一份回家
    去了;B第二个醒来,也将鱼平分为5分,扔掉多余的一条,只拿走自己的一分;接着C,D,
    E依次醒来,也都按同样的办法分鱼。问5人至少合伙捕到多少条鱼?每个人醒来后所看到的
    鱼数是多少条?

    //编制时间:2004年11月22日
    //主要功能:递归算法的事例
    //编制人:周峰
      其中的一组解也是最小解为:
      621
      496
      396
      316
      252
     
      程序的解不是唯一的,设定不同的fish[0]值就可能得到不同的解,比如说fish[0]=721时
      就可得到另一组解
      1246
      996
      796
      636
      252
    程序的原代码:
     #include <iostream.h>
    void main()
    {
     int fish[5]={721,1,1,1,1};
     int i;
        do
     {
           
      for(i=0;i<=3;i++)
      {  if((fish[i]-1)%5==0)
         fish[i+1]=(fish[i]-1)*4/5;
       
         else
       break;
       
             }
       fish[0]+=5;
     }
           while(i<=3);
     fish[0]-=5;

     for(i=0;i<=4;i++)
     {
      cout<<fish[i]<<endl;
     }
    }  

     

    [1]