实验名称:实验五 递推问题(二)
实验目的:熟练掌握一些递推问题的处理方法:仔细分析,不断尝试推理,充分利用数学知识,找出问题中的内在规律,抽象出递推的数学模型。
实验内容:
输入:输入一个正整数n(n≤42),表示2×n的棋盘。
输出:输出一行结果,为一个整数,表示棋盘完美覆盖方案数。
输入样例
8
输出样例
34
- 问题描述:(汉诺塔)约在19世纪末,欧洲的商店中出售一种智力玩具,在一块铜板上有三根杆,在最左边的杆上按照自上而下、由小到大的顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放在小盘上面。Daisy实现过原来的汉诺塔问题,但碰到改变游戏玩法的问题时,她想了很久都不能解决,现在请你帮助她。现在有n个圆盘,她至少移动多少次才能把这些圆盘从最左边移到最右边?
输入:包含多组数据,每次输入一个n值(0≤n≤64),当n=0时表示输入结束。
输出:对于每组数据,输出移动最小的次数。
输入样例
1
3
12
0
输出样例
2
26
531440
- 问题描述:(数字序列)有按下列公式定义的一个序列:f(1)=1 f(2)=1 f(n)=(A*f(n-1)+B*f(n-2)) mod 7当给定A、B和n时,编程计算f(n)的值。
输入:输入中包含多组数据,每组测试数据占一行,包括3个整数,分别为A、B和n,其中1≤A,B≤100,1≤n≤100000000,3个0表示输入结束。
输出:对于每组测试数据输出一个f(n)值,并且占一行。
输入样例
1 1 3
1 2 10
0 0 0
输出样例
2
5
- 问题描述:(Fibonacci数列)Fibonacci数列另一种形式为:F(0)=7,F(1)=11,F(n)=F(n-1)+F(n-2)(n≥2)。
输入:输入包括多行,每行并且只有一个整数n(n≤1000000),当n<0时表示输入结束。
输出:对应输入的n,若序列的第n项能被3整除,则输出yes,否则输出no。
输入样例
0
1
2
3
4
5
-1
输出样例
no
no
yes
no
no
no
- 问题描述:(分数数列)一个数列的前6项为:1/2,3/5,4/7,6/10,8/13,9/15等,试求数列的第n(n<2000)项。
实验结果与分析(运行界面截图,打开需要截的图,按ALT+PrintScreen后,将光标移到下面,单击右键后选择“粘贴”):
1.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int i,n,f1,f2,f3; scanf("%d",&n); f1=1;f2=2; if(n==1)printf("%d\n",f1); else if(n==2)printf("%d\n",f2); else{ for(i=3;i<=n;i++) { f3=f1+f2; f1=f2; f2=f3; } printf("%d\n",f3); } return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
2.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int i,n,f1,f2; n=1; while(1) { scanf("%d",&n); if(n==0)break; f1=f2=2; for(i=2;i<=n;i++) { f2=3*f1+2; f1=f2; } printf("%d\n",f2); } return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
3.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int i,f1,f2,f3,a,b,n; while(1) { f1=1;f2=1; scanf("%d%d%d",&a,&b,&n); if(a==0&&b==0&&n==0) break; for(i=3;i<=n;i++) { f3=(a*f2+b*f1)%7; f1=f2;f2=f3; } printf("%d\n",f3); } return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
4.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { long n; while(1) { scanf("%ld",&n); if(n<0) break; if((n+2)%4==0) printf("yes\n"); else printf("no\n"); } return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
5.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int c[2000],d[2000],n,i,j,m,f; scanf("%d",&n); c[1]=1;d[1]=2;c[2]=3;d[2]=5; for(i=3;i<=n;i++) { m=c[i-1]+1; while(1) { f=0; for(j=i-1;j>0;j--) { if(m==d[j]) { f=1; break; } if(m>d[j]) { break; } } if(f==0) { c[i]=m; break; } m++; } d[i]=c[i]+i; } printf("%d/%d\n",c[n],d[n]); return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
问题及解决方法,心得:(实验中遇到的问题和解决问题的方法)
评定成绩: