C语言关于猴子吃桃问题(递归,非递归)

/*问题描述猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子。求第一天共摘了多少桃子。*/

/*递归算法*/

#include<stdio.h>
long int G(int day)
{
  if (day == 0)
    return 1;
  else if (day > 0)
    return 2 *( G(day - 1) + 1);
  else
    return -1;
}
int main()
{
  printf("桃子总数:%ld\n", G(10));
  return 0;
}

/*非递归*/

#include<stdio.h>
int main()
{
  int day = 1, t, a = 0;
  for (t = 1; a != 1; t++)
  {
    a = t;
    day = 0;
    do
      {
        a = a / 2 - 1;
        day++;
      } while (day<10);
    if (a == 1)
    printf("桃子总数=%d\n", t);
  }

  return 0;
}

时间: 2024-10-20 22:13:46

C语言关于猴子吃桃问题(递归,非递归)的相关文章

C语言之猴子吃桃

猴子吃桃问题.猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,又多吃了一个.第二天早上又吃了剩下的桃子的一半,又多吃了一个.以后每天都吃了前一天剩下的一半零一个,到第 10 天早上想再吃的时候,就剩下一个桃子.求第一天共摘多少个桃子. 代码实现: #include <stdio.h> int sum_peach(const int n,int sum) {  int i=0;  for(i=n;i>0;i--)  {   sum=2*sum+1;  }  return sum; } i

c语言:猴子吃桃问题

程序: #include <stdio.h> int main() { int day=9,x1,x2=1; while (day>0) { x1=(x2+1)*2;   //第1天的桃子数是第2天的桃子数加1后的2倍 x2=x1; day--; } printf ("%d\n",x1); return 0; } 输出结果: 1534 Press any key to continue

C语言:猴子吃桃问题,每天吃一半多一个,第 10天后只剩1个,求共多少个

#include<stdio.h> int main() {  int i=0;  int sum=1;  for(i=1;i<=9;i++)  {   sum=(sum+1)*2;   }  printf("sum=%d",sum); return 0;  }

猴子吃桃(C语言)

                           猴子吃桃(C语言) 1.问题描述 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将第一天剩下的桃子吃掉一半,又多吃一个.以后每天早上都吃了前一天剩下的一半零一个.到第十天早上想吃时,发现只剩下一个了.求猴子第一天共摘了多少个桃子. 2.问题思考 从数学角度出发,该问题从"第10天剩下的1个桃子"下手.可设当天所吃桃子数为n,前一天所吃桃子数为m,得m-(m/2+1)=n,求得m=(n+1)*2. 3.问

ocrosoft 程序设计提高期末复习问题M 递归求猴子吃桃

http://acm.ocrosoft.com/problem.php?cid=1172&pid=12 题目描述 猴子吃桃问题.猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第2天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半另加一个.到第n天早上想再吃时,就只剩下一个桃子了.求第1天共摘了多少个桃子 输入 n的值 输出 剩下的桃子数量 样例输入 10 样例输出 total=1534 题解:运用递归的思想,定义的A的函数代表的是第n天开始的时候所有

趣味案例之猴子吃桃

[问题描述] 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将第一天剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半后又多吃一个.到第10天早上想再吃时,发现只剩下一个桃子了. 求猴子第一天共摘了多少个桃子. [设计思路]  第1天的桃子数是第2天的桃子数加1后的2倍,第2天的桃子数是第3天的桃子数加1后的2倍,......,一般地,第k天的桃子数是第k+1天的桃子数加1后的2倍. 设第k天的桃子数是t(k),则有递推关系t(k) = (t(k

经典算法题每日演练——第三题 猴子吃桃

原文:经典算法题每日演练--第三题 猴子吃桃 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多少个桃子? 分析: 这是一套非常经典的算法题,这个题目体现了算法思想中的递推思想,递归有两种形式,顺推和逆推,针对递推,只要 我们找到递推公式,问题就迎刃而解了. 令S10=1,容易看出 S9=2(S10+1), 简化一下 S9=2S10+2 S8=2S

ACM每日一练(猴子吃桃问题)

描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第m天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个? (m<29) 输入 第一行有一个整数n,表示有n组测试数据(从第二行开始,每一行的数据为:第m天): 输出 每一行数据是桃子的总个数 样例输入 2 3 11 样例输出 22 6142 普通解法 分析:  倒推  前一天的桃子总数 与后一天的桃子总数关系 递推公式是 a[m-1]=(a[m]+1)*2; 我们可以通过循环m

循环-16. 猴子吃桃问题

循环-16. 猴子吃桃问题(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个:第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半加一个.到第N天早上想再吃时,见只剩下一个桃子了.问:第一天共摘了多少个桃子? 输入格式: 输入在一行中给出正整数N(1<N<=10). 输出格式: 在一行中输出第一天共摘了多少