实验报告-04

实验名称:实验四 递推问题(一)

实验目的:熟练掌握一些递推问题的处理方法:仔细分析,不断尝试推理,充分利用数学知识,找出问题中的内在规律,抽象出递推的数学模型。

实验内容:

  1. 问题描述:(兔子繁殖)已知一对成熟的兔子每月可生一对小兔子。出生的小兔子两个月后成熟,就可再生一对小兔子。问在第n(n≤36)个月的时候共有多少对兔子?

输入:只有一个整数n。

输出:第n个月的兔子对数。

输入样例

4       

输出样例

5       

  1. 问题描述:(捕鱼)A、B、C、D、E共5个人合伙夜间捕鱼,清晨时都疲倦不堪,各自在河边的树丛中睡着了。日上三杆,A第一个醒来,他将鱼平分为5份,把多余的1条扔回河中,拿着自己的一份回家了。B第二个醒来,也将鱼平分为5份,扔掉多余的1条,拿走自己的一份。接着C、D、E依次醒来,也都按此办理。问:5个人至少捕到多少条鱼?
  2. 问题描述:(卖西瓜)市场管理员询问集市上卖西瓜的农民今天上午卖了几个西瓜时,这个农民回答说:我在第1个小时卖出了全部西瓜的1/2又1/2个;第2小时卖出了剩余的1/3又1/3个;在第3个小时卖出了剩余的1/4又1/4个;在第4个小时卖出了剩余的1/5又1/5个;最后正好剩11个西瓜。问:这个农民原来一共有多少个西瓜?
  3. 问题描述:(平面分隔)在平面上画n条封闭的曲线,各曲线之间两两相交于两点,并且任意三条封闭的曲线都不相交于一点,求这样的n条曲线将平面分为多少个区域?

输入:输入包括多组测试数据,每组测试数据占一行并且只有一个正整数n(0≤n≤1000),当n=0时表示输入结束。

输出:对每组测试数据输出一行结果,结果为一个整数,表示这n条曲线将平面划分成的区域数。

输入样例

1

3

0

输出样例

2

8

  1. 问题描述:(走台阶)有n级台阶,某人从下向上走,每次跨1级或2级。问:若他走完n级,可能有多少种不同的走法?

输入:输入包括多组测试数据,每组测试数据占一行并且只有一个正整数n(0≤n≤30),当n=0时表示输入结束。

输出:对每组测试数据输出一行结果(结果为一个整数),表示不同走法的方案数。

输入样例

1

2

5

0

输出样例

1

2

8

实验结果与分析(运行界面截图,打开需要截的图,按ALT+PrintScreen后,将光标移到下面,单击右键后选择“粘贴”):

 1.

(Ⅰ)程序代码及注释

#include <stdio.h>

#include <math.h>

int main(int argc, char *argv[])

{

int i,n,f[36+1];//no use f[0]

scanf("%d",&n);

f[1]=1;f[2]=2;

for(i=3;i<=n;i++)

f[i]=f[i-1]+f[i-2];

printf("%d\n",f[n]);

return 0;

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

2.

(Ⅰ)程序代码及注释

#include <stdio.h>

int main(int argc, char *argv[])

{

int i,n,f[5],flag=1;

n=1;

while(flag==1)

{

f[0]=5*n+1;

flag=0;

for(i=1;i<5;i++)

{

if(f[i-1]%4!=0)

{

flag=1;

break;

}

f[i]=5*f[i-1]/4+1;

}

n++;

}

printf("%d\n",f[4]);

return 0;

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

3.

(Ⅰ)程序代码及注释

#include <stdio.h>

int main(int argc, char *argv[])

{

int n,a[5];

a[4]=11;

for(n=4;n<=1;n--)

a[n-1]=(n+1)/n*a[n]+1/n;

printf("%d\n",a[0]);

return 0;

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

4.

(Ⅰ)程序代码及注释

#include <stdio.h>

int main(int argc, char *argv[])

{

int i,n,f1,f2;

while(1)

{

scanf("%d",&n);

if(n==0)break;

f1=2;

for(i=1;i<=n;i++)

{

f2=f1+2*(i-1);

f1=f2;

}

printf("%d\n",f2);

}

return 0;

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

5.

(Ⅰ)程序代码及注释

#include <stdio.h>

int main(int argc, char *argv[])

{

int n,i,f1,f2,f3;

while(1)

{

scanf("%d",&n);

if(n==0) break;

f1=1;f2=2;

if(n==1)

{

printf("%d\n",f1);

continue;

}

if(n==2)

{

printf("%d\n",f2);

continue;

}

for(i=3;i<=n;i++)

{

f3=f1+f2;

f1=f2;

f2=f3;

}

printf("%d\n",f3);

}

return 0;

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

问题及解决方法,心得:(实验中遇到的问题和解决问题的方法)

评定成绩:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值