猴子吃桃问题
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);
}
#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);
}
相关文章推荐
- Random Forest 随机森林
- 基于FS4412嵌入式系统移植(8) linux内核调试之printk
- Java中判断对象是否相等的equals()方法使用教程
- css word-wrap和word-break强制换行
- 我们应该如何去了解JavaScript引擎的工作原理 系列
- HDU4355(三分)
- Chp15 网络编程
- NoSQL数据库概览及其与SQL语法的比较
- 小代码 代码整理
- ssh框架中的basedao
- 2 Add Two Numbers
- Codeforces Round #353 (Div. 2) B.Restoring Painting
- ARC_xp_20160526
- CodeForces 592B
- 求素数问题
- UVa1368 DNA Consensus String
- BST二叉搜索树的查找算法
- How to debug .NET Core RC2 app with Visual Studio Code on Windows?
- c#简易反射调用泛型方法
- 第13周-项目1-动物这样叫(3)