实验名称:实验四 递推问题(一)
实验目的:熟练掌握一些递推问题的处理方法:仔细分析,不断尝试推理,充分利用数学知识,找出问题中的内在规律,抽象出递推的数学模型。
实验内容:
- 问题描述:(兔子繁殖)已知一对成熟的兔子每月可生一对小兔子。出生的小兔子两个月后成熟,就可再生一对小兔子。问在第n(n≤36)个月的时候共有多少对兔子?
输入:只有一个整数n。
输出:第n个月的兔子对数。
输入样例
4
输出样例
5
- 问题描述:(捕鱼)A、B、C、D、E共5个人合伙夜间捕鱼,清晨时都疲倦不堪,各自在河边的树丛中睡着了。日上三杆,A第一个醒来,他将鱼平分为5份,把多余的1条扔回河中,拿着自己的一份回家了。B第二个醒来,也将鱼平分为5份,扔掉多余的1条,拿走自己的一份。接着C、D、E依次醒来,也都按此办理。问:5个人至少捕到多少条鱼?
- 问题描述:(卖西瓜)市场管理员询问集市上卖西瓜的农民今天上午卖了几个西瓜时,这个农民回答说:我在第1个小时卖出了全部西瓜的1/2又1/2个;第2小时卖出了剩余的1/3又1/3个;在第3个小时卖出了剩余的1/4又1/4个;在第4个小时卖出了剩余的1/5又1/5个;最后正好剩11个西瓜。问:这个农民原来一共有多少个西瓜?
- 问题描述:(平面分隔)在平面上画n条封闭的曲线,各曲线之间两两相交于两点,并且任意三条封闭的曲线都不相交于一点,求这样的n条曲线将平面分为多少个区域?
输入:输入包括多组测试数据,每组测试数据占一行并且只有一个正整数n(0≤n≤1000),当n=0时表示输入结束。
输出:对每组测试数据输出一行结果,结果为一个整数,表示这n条曲线将平面划分成的区域数。
输入样例
1
3
0
输出样例
2
8
- 问题描述:(走台阶)有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; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
问题及解决方法,心得:(实验中遇到的问题和解决问题的方法)
评定成绩: