C语言实现猴子吃桃子问题

这篇博客探讨了一个有趣的数学问题——猴子吃桃。通过四种不同的算法方法(简单法、数组法、递归法和链表结构)来解决这个问题,计算出初始时猴子共摘了多少个桃子。每种方法都给出了详细的实现代码,并在最后给出了具体的结果:1534个桃子。
摘要由CSDN通过智能技术生成

猴子吃桃问题
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void zhijiefa()           //直接使用简单算法计算
{
	int i,peach;
	peach=1;
	for(i=10;i>1;i--)
		peach=(peach+1)*2;
	printf("简单法:猴子共摘了%d个桃子!\n",peach);
}
void shuzufa()          //使用数组结构
{
	int tao[10],i;
	tao[9]=1;           //定义第十天只剩一个桃子
	for(i=8;i>=0;i--)   //for循环采用逆推计算第一天的桃子
		tao[i]=2*(tao[i+1]+1);
	printf("数组法:猴子共摘了%d个桃子!\n",tao[0]);
}
int digui(int n)        //采用递归法
{
	if(n==10)           //n表示第十天
		return 1;
	else
		return 2*(digui(n+1)+1); 
}
typedef struct Node
{
    int data;           //数据域
    struct Node *next;  //链表指针
} SqList;
SqList *head;
void Insert()           //创建链表
{
    SqList *s,*p;
    int day=10;
    int peach=1;
    head=(SqList *)malloc(sizeof(SqList));  //建立头结点
    p=head;
    while(day>0)
    {
        s=(SqList *)malloc(sizeof(SqList));  //生成新的结点
        s->data=peach;
        p->next=s;
        p=s;
        peach=(peach+1)*2;                   //计算总桃子数
        day--;
    }
    p->next=NULL;
    p=head;
    head=head->next;
    free(p);
}
int main()
{
	SqList *p;
	int sum,day=10;
	int count=0;
	zhijiefa();
	shuzufa();
	count=digui(1);          //递归调用计算
	printf("递归法:猴子共摘了%d个桃子!\n",count);
    Insert();
    p=head;
    while(p!=NULL&&day>0)
    {
        printf("第%d天:%d个桃子\n",day,p->data);
        p=p->next;
        day--;
        if(day==1)           //当天数等于1时,计算总个数
       sum=p->data;
    }
 printf("链结构:猴子共摘了%d个桃子\n",sum);
    return 0;
}

运行结果为1534个桃子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值