数据结构-猴子吃桃问题

一、需求分析

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

      1)采用数组数据结构实现上述求解;

      2)采用链数据结构实现上述求解;

      3)采用递归实现上述求解;

二、概要设计

1.设计思路

     C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

2.设计方案

      如果用数组结构解决这个问题,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为a[i]=3*2e(i-1)-2  (i>=2)

      如果用链结构解决这个问题,建立一个链表,根据每天桃子数与后一天桃子数的关系n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。

      如果用递归结构解决这个问题,要求利用他们每天都吃当前桃子的一半且再多吃一个这一特点,设计一个递归算法。

三、调用关系与算法流程分析

数组

       把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为a[i]=3*pow2(i-1)-2  (i>=2)

关键代码:

nt day,tao[11];  //定义数组和下标
tao[0]=0;         //tao[0]赋值为0
tao[1]=1;         //倒数第一天的桃子数为1
for(day=2;day<=10;day++)
tao[day]=3*pow(2,day-1)-2;  //给数组的赋值
printf("最初的桃子数为%d\n",tao[10]);//输出最初的桃子数


链结构

      用链结构实现这个算法,其核心是利用链表这种存储结构,将每天的桃子数存储在链表中,在链表中实现数的递推。首先是建立一个空链表,产生一个头结点,且将头结点的地址赋给L。然后把每天的桃子数从链表的第一个结点插入链表。最后第一天的桃子数被最后一个插入链表,成为链表中第一个值,将其赋给e,最后只要输出e即得到第一天的桃子数。

建立单链表的程序代码如下:

void InitList(LinkList &L)//构造一个空链链表
{ 
L=(LinkList)malloc(sizeof(LNode));//产生头结点,并使L指向此头结点
if(!L) exit(OVERFLOW);L->next=NULL;
}

递归

       设计递归算法,利用x=2*x+2,定义一个函数sum_fan,然后不断调用自身,求得第一天的桃子数。

四、程序代码(c语言)

# include<stdio.h>
# include<math.h>
void main()
{
int day,tao[11];  
tao[0]=0;         
tao[1]=1;         
for(day=2;day<=10;day++)
tao[day]=3*pow(2,day-1)-2;  
printf("最初的桃子数为%d\n",tao[10]);//输出最初的桃子数
}#include"iostream"
#include"stdlib.h"
#include"stdio.h"
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW 0
#define OK 1
#define NULL 0
typedef int Status;
typedef int ElemType;
struct LNode
{ 
ElemType data;
LNode *next;
};
typedef LNode *LinkList;
void InitList(LinkList &L)
{ 
L=(LinkList)malloc(sizeof(LNode));
if(!L) exit(OVERFLOW);L->next=NULL;
}
Status GetElem(LinkList L,int i,ElemType &e)
{ 
int j=1;
LinkList p=L->next;
while(p&&j<i)
{ 
j++;
p=p->next;
}
if(!p||j>i)
return ERROR;e=p->data;return OK;
}
Status ListInsert(LinkList L,int i,ElemType e)
{ 
int j=0;
LinkList s,p=L;
while(p&&j<i-1)
{
j++;p=p->next;
}
if(!p||j>i-1) return 0;
s=(LinkList)malloc(sizeof(LNode));s->data=e;
s->next=p->next;p->next=s;return 1;
}
void main()
{ 
LinkList L;
int i,e,n;
InitList(L);
for(i=1,n=1;i<=10;i++){
n=2*n+2;
ListInsert(L,1,n);
}
Status GetElem(L,1,e);
printf("%d",e);
}
include<stdio.h>
int sum_fan(int n,int i)    
{if (i>0){n = sum_fan((n+1)*2,--i);    }
return n;               
}
void main()
{int sum;
int day = 9;            int x = 1;             
sum = sum_fan(x,day);    printf("%d",sum);      
}

五、总结

       猴子吃桃问题就到这里啦,看到这里点个赞支持一下吧,感谢铁铁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源攻防武器项目

半/全自动化利用工具 项目简介 项目地址 项目名称 一款GUI界面的渗透工具&#xff0c;将部分人工经验转换为自动化&#xff0c;集成了渗透过程中常用到的一些功能&#xff0c;目前集成了端口扫描、端口爆破、web指纹扫描、漏洞扫描、漏洞利用以及编码转换功能&#xff0c;后…

TrustZone之其他设备及可信基础系统架构

一、其他设备 最后,我们将查看系统中的其他设备,如下图所示: 我们的示例TrustZone启用的系统包括一些尚未涵盖的设备,但我们需要这些设备来构建一个实际的系统。 • 一次性可编程存储器(OTP)或保险丝 这些是一旦写入就无法更改的存储器。与每个芯片上都包含相同…

数据仓库与数据挖掘小结

更加详细的只找得到pdf版本 填空10分 判断并改错10分 计算8分 综合20分 客观题 填空10分 判断并改错10分--错的要改 mooc中的--尤其考试题 名词解释12分 4个&#xff0c;每个3分 经常碰到的专业术语 简答题40分 5个&#xff0c;每道8分 综合 画roc曲线 …

02.Git常用基本操作

一、基本配置 &#xff08;1&#xff09;打开Git Bash &#xff08;2&#xff09;配置姓名和邮箱 git config --global user.name "Your Name" git config --global user.email "Your email" 因为Git是分布式版本控制工具&#xff0c;所以每个用户都需要…

数据安全传输基础设施平台(一)

1引言 1.1项目简介 数据安全传输基础设置平台项目&#xff08;简称&#xff0c;数据传输平台&#xff09;&#xff0c;是一款基础设施类项目&#xff0c;为集团、企业信息系统的提供统一、标准的信息安全服务&#xff1b;解决企业和企业之间&#xff0c;集团内部信息数据的传…

gitee提交代码步骤介绍(含git环境搭建)

1、gitee官网地址 https://gitee.com; 2、Windows中安装git环境 参考博客&#xff1a;《Windows中安装Git软件和TortoiseGit软件》&#xff1b; 3、设置用户名和密码 这里的用户名和密码就是登录gitee网站的用户名和密码如果设置错误&#xff0c;可以在Windows系统的“凭据管理…

【深度学习目标检测】九、基于yolov5的安全帽识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

【Vue3练习】Vue3使用v-model以及多个v-model

注意事项&#xff1a;Vue3里面v-model对应的事件名称不能随便取了&#xff0c;必选是update:后面接对象的绑定值&#xff08;父组件传入的值&#xff09; 父组件&#xff1a; <script setup > import { ref} from vue; import MyInput from "./components/cz-inpu…

macos苹果电脑开启tftp server上传fortigate60e固件成功

cat /System/Library/LaunchDaemons/tftp.plist<?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist…

IDEA2023 + spring cloud 工程热部署设置方法

基于spring cloud 工程进行热部署 &#xff0c;实现每次修改工程源文件&#xff0c;后台自动启动&#xff0c;方便开发测试工作。具体分为5步骤即可&#xff1a; 1、修改工程的pom文件&#xff0c;增加adding devtools 工具包。 <dependency> <groupId>org.s…

LeetCode290. Word Pattern

文章目录 一、题目二、题解 一、题目 Given a pattern and a string s, find if s follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s. Example 1: Input: pattern “ab…

js基础入门

先来一点js基础&#xff0c;其实js大部分的时候都在处理对象或者数组。 对象四个基本操作&#xff1a;增删改查 掌握元素的增删改查&#xff0c;了解如何拷贝&#xff0c;深拷贝和浅拷贝的区别。详情见代码 <script>//创建对象一共有三种赋值声明的语法let obj{} //赋值…

Vue 项目关于在生产环境下调试

前言 开发项目时&#xff0c;在本地调试没问题&#xff0c;但是部署到生产会遇到一些很奇怪的问题&#xff0c;本地又没法调&#xff0c;就需要在生产环境/域名下进行调试。 在这里介绍一个插件Vue force dev ,浏览器扩展里下载 即便是设置了Vue.config.devtoolsfalse 只要安…

制作ubuntu上的python容器镜像

制作Ubuntu上的python容器镜像 序言 由于 ubuntu20.04 默认是python3.8&#xff0c;因此3.9需要再安装 拉取镜像基线 docker pull ubuntu:20.04启动容器 docker run -it -e LANGC.UTF-8 ubuntu:20.04安装python 进入容器后安装python包 # 修改 apt源 sed -i shttp://arc…

认知能力测验,③如何破解语言常识类测试题?

作为认知能力测评中的一个环节&#xff0c;语言常识类&#xff0c;是大概率的出现&#xff0c;不同的用人单位可能略有不同&#xff0c;语言是一切的基础&#xff0c;而常识则意味着我们的知识面的宽度。 语言常识类的测试&#xff0c;如果要说技巧&#xff1f;难说....更多的…

zookeeper和nacos区别是什么,注册中心用zookeeper还是nacos

注册中心对比和选型&#xff1a;Zookeeper、Eureka、Nacos、Consul和ETCD zookeeper和nacos区别是什么 Nacos集群raft选举算法原理 Zookeeper和Nacos是两个不同的分布式系统协调组件&#xff0c;它们在设计目标、功能特性和使用方式等方面存在一些区别。以下是它们的主要区别…

c# OpenCV 图像裁剪、调整大小、旋转、透视(三)

图像裁剪、调整大小、旋转、透视图像处理基本操作。 croppedImage 图像裁剪Cv2.Resize() 调整图像大小图像旋转 Cv2.Rotate()旋转Cv2.Flip()翻转Cv2.WarpAffine()任意角度旋转Cv2.GetAffineTransform()透视 一、图像裁剪 // 读取原始图像 Mat image new Mat("1.png&q…

mysql间隙锁,next-key lock,row锁加锁范围分析

介绍 mysql可重复读隔离级别的实现主要依赖mvcc(多版本并发控制)和间隙锁&#xff0c;行锁&#xff0c;多种锁的组合使用来解决可重复读和幻读的问题。 mvcc:主要是给保存每行数据的多个版本&#xff0c;每个版本多了2个字段&#xff0c;一个为最后更新事务的id,一个是删除事务…

maui sqlite开发一个商城加购物车的演示(3)

购物车界面及代码 <?xml version"1.0" encoding"utf-8" ?> <ContentPage xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:syncfusion"clr-namesp…