数据结构-猴子吃桃问题

一、需求分析

       有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第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,一经查实,立即删除!

相关文章

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;如更深的网络结构、更多的特征层和更高分辨率的输入图…

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

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

js基础入门

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

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

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

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

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

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…

ArcMap自定义脚本工具箱迁移至ArcGIS pro

本文记录了将ArcMap10.7创建的自定义脚本工具箱&#xff08;.tbx&#xff09;迁移至ArcGIS pro的过程 ArcGIS Pro使用的是python版本与ArcMap不同&#xff0c;前者为python3&#xff0c;后者为python2。由于python3 和 python2 的部分语法不兼容&#xff0c;以及一些地理处理工…

87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验

瞬间爆火的Mixtral 8x7B 大家好&#xff0c;我是老章 最近风头最盛的大模型当属Mistral AI 发布的Mixtral 8x7B了&#xff0c;火爆程度压过Google的Gemini。 缘起是MistralAI二话不说&#xff0c;直接在其推特账号上甩出了一个87GB的种子 随后Mixtral公布了模型的一些细节&am…

vue3的大致使用

<template><div class"login_wrap"><div class"form_wrap"> <!-- 账号输入--> <el-form ref"formRef" :model"user" class"demo-dynamic" > <!--prop要跟属性名称对应-->…

磁力计LIS2MDL开发(3)----九轴姿态解算

磁力计LIS2MDL开发.3--九轴姿态解算 概述视频教学样品申请完整代码下载使用硬件欧拉角万向节死锁四元数法姿态解算双环PI控制器偏航角陀螺仪解析代码 概述 LIS2MDL 包含三轴磁力计。 lsm6ds3trc包含三轴陀螺仪与三轴加速度计。 姿态有多种数学表示方式&#xff0c;常见的是四元…

服务器RAID配置及功能介绍

服务器RAID配置及功能介绍 一、RAID磁盘阵列详解1.RAID磁盘阵列介绍2.RAID 03.RAID14.RAID35.RAID56.RAID67.RAID 10总结阵列卡介绍 一、RAID磁盘阵列详解 1.RAID磁盘阵列介绍 ①是Redundant Array of lndependent Disks的缩写中文简称为独立冗余磁盘阵列。 ②把多块独立的物…

NBA得分数据可视化

简介 这是上学期的一些课外活动内容&#xff0c;将 NBA 得分数据进行可视化&#xff0c;并进行后续的探索性分析和建模&#xff08;本文未介绍&#xff09;。主要研究动机来源于这篇论文&#xff1a; 该论文使用二元的伽马过程来刻画 NBA 主客场得分数据&#xff0c;并且考虑了…

5.5 Linux Apache服务

1、概念介绍 a. Web 服务简介 WEB服务器也称为WWW(WORLD WIDE WEB&#xff0c;万维网)服务器&#xff0c;主要功能是提供网上信息浏览服务。 常用web服务器&#xff1a;httpd&#xff08;apache&#xff09;、nginx、tomcat、IIS 客户端&#xff1a;IE、firefox、chrome b…

高通平台开发系列讲解(AI篇)SNPE工作流程介绍

文章目录 一、转换网络模型二、量化2.1、选择量化或非量化模型2.2、使用离线TensorFlow或Caffe模型2.3、使用非量化DLC初始化SNPE2.4、使用量化DLC初始化SNPE三、准备输入数据四、运行加载网络沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍SNPE模型工作…