猴子吃桃 递归 循环 等比数列

do-while

#include<stdio.h>
int main()
{
  int n = 1;//第十天只剩下1个桃子,所以初始值为1
  int day = 9;//第十天是已知条件,所以循环从第九天开始
  do
  {
    n =(n+1)*2;//每天都是前一天的一半加1,所以这里计算后一天的桃子数
    day--;//天数减1
  }while(day>=0);//循环到第0天结束
  printf("原来有%d个桃子\r\n",n);
return 0;
}

for

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int peach = 0;//桃子总数
  int rest = 1;//第10天只剩下一个桃子
  int day = 0;//
  for(day = 9 ;day>0;day--)
  {
    peach = (rest+1)*2;//每天的桃子总数是后一天剩余桃子加一乘2
    rest = peach;
  }
  printf("猴子第一天一共摘了%d个桃子\r\n",peach);
  system("pause");
  return 0;
}

等比数列

int fun()
{
  int na=10; //已知剩余的天数
  double pa=1; //已知的剩余数
  int nx=1; //欲求剩余的天数
  double px; //欲求的剩余数
  if((na-nx)>=0)
  {
    //函数原型:double ldexp(double num,int exp);
    //返回:num*{2的exp次幂}
    px=ldexp((1+2),(9))-2;
    int i=(int)px;//取整数
    printf("第一天共摘了%d只桃子\n",i);
  }
return 1;
}

递归

#include <stdio.h>

int eat_peaches(int day, int total_peaches) 
{
    // 如果是第十天,则返回剩余的桃子数量
    if (day == 10) 
    {
        return total_peaches;
    }
    
    // 计算第day天剩下的桃子数量
    int current_peaches = (total_peaches + 1) / 2;
    // 递归调用下一天的吃桃过程
    return eat_peaches(day + 1, current_peaches);
}

int main() {
    // 第十天只剩下一个桃子
    int total_peaches_on_tenth_day = 1;
    // 调用递归函数计算第一天开始的剩余桃子数量
    int remaining_peaches = eat_peaches(1, total_peaches_on_tenth_day);
    
    printf("The total number of peaches on the first day: %d\n", remaining_peaches);
    
    return 0;
}

posted @ 2024-04-16 21:03  不会笑的孩子  阅读(24)  评论(0编辑  收藏  举报