您的位置:首页 > 其它

猴子吃桃问题

2016-05-26 08:59 363 查看
1.      猴子吃桃子问题。有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求:1)采用数组数据结构实现上述求解;2)采用链式数据结构实现上述求解;3)采用递归实现上述求解。(2)

#include <stdio.h>
#include "malloc.h"
#include <stdlib.h>
#include <stdlib.h>

//////////////////密码子函数
int mima()
{
int a=123456,h;
int r;
for(int i=0;i<=2;i++)
{
printf("please input the password: ");
scanf("%d",&h);
if(h==a)
{
printf("登陆成功……\n");
r=1;
break;
}
else
printf("密码错误……请重新输入\n");
}
if(i==3)
exit(0);
return(r);
}
///////////////////////////菜单函数
void menu()
{
printf("*******************************************************************************\n\n");
printf(" 问题的引出\n");
printf(" 2. 猴子吃桃子问题。有一群猴子摘了一堆桃子,他们每天都吃当前桃子\n");
printf(" 的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来\n");
printf(" 这群猴子共摘了多少个桃子?\n\n\n\n");
printf("菜单选择:\n\n");
printf( "1、数组计算 2、链表计算 3、递归计算 4、一般方法计算 5、退出\n\n\n");
printf("*******************************************************************************\n\n");
}
//////////////////////////数组函数
void shuzu()
{
int a[10];
int n=1;
for(int i=9;i>=1;i--)
{
a[i-1]=(n+1)*2;
n=a[i-1];
}
printf("用数组数据结构计算桃子总数为: \n");
printf("%d\n",n);
}
//////////////////////////用动态链表存储方式实现求解函数
struct Lnode //定义节点的结构体
{
int num;
struct Lnode *next;
};
void lianbiao()
{
struct Lnode *p1,*p2;
p1=p2=(struct Lnode*)malloc(sizeof(struct Lnode));//开辟动态链表存储空间
p1->num=1;
for(int i=1;i<=9;i++)
{
p2->next=p1; //始终使得p1指针指向最后一个新开节点,而p2指向p1
p2=p1;
p1=(struct Lnode*)malloc(sizeof(struct Lnode));
p1->num=(p2->num+1)*2;
}
printf("用链表数据结构计算桃子总数为: \n");
printf("%d\n",p1->num);
}
/////////////////////用递归方法实现求解
int digui2(int n,int i) //子函数digui2,参数n和i接受主函数的参数 x和day
{
if (i>0)
{
n = digui2((n+1)*2,--i); //每一次都用((n+1)*2)的值去调用子函数本身
}
return n; //返回结果
}

void digui()
{
int m;
int day = 9; //实现函数调用的次数
int x = 1; //最后一天还剩得一个桃子
m = digui2(x,day); //调用子函数digui2,并把返回得结果赋给m

printf("用递归算法求得桃子总数为:\n");
printf("%d\n",m);
}
//////////////////////////一般方法函数
void f()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{
x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
x2=x1;
day--;
}
printf("用一般方法计算桃子总数为: \n");
printf("%d\n",x1);
}
/////////////////////////main主函数
void main()
{
int n;
int tea;
int mima(); //密码函数函数声明
void menu();
void digui(); //递归方法子函数声明
void shuzu(); //数组方法子函数声明
void lianbiao(); //链表方法子函数声明
void f(); //一般方法子函数声明
tea=mima();
if(tea==1)
menu();
do
{
printf("请选择操作(输入序号1--5): ",n);
scanf("%d",&n);
switch (n)
{
case 1:shuzu() ;
break;
case 2:lianbiao();
break;
case 3: digui();
break;
case 4:f();
break;
case 5:exit(0);
break;
}
printf("\n\n\n");
}while(n);
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: