实验室开放项目实验报告-05

实验名称:实验五 递推问题(二)

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

实验内容:

输入:输入一个正整数n(n≤42),表示2×n的棋盘。

输出:输出一行结果,为一个整数,表示棋盘完美覆盖方案数。

输入样例

8       

输出样例

34      

  1. 问题描述:(汉诺塔)约在19世纪末,欧洲的商店中出售一种智力玩具,在一块铜板上有三根杆,在最左边的杆上按照自上而下、由小到大的顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放在小盘上面。Daisy实现过原来的汉诺塔问题,但碰到改变游戏玩法的问题时,她想了很久都不能解决,现在请你帮助她。现在有n个圆盘,她至少移动多少次才能把这些圆盘从最左边移到最右边?

输入:包含多组数据,每次输入一个n值(0≤n≤64),当n=0时表示输入结束。

输出:对于每组数据,输出移动最小的次数。

输入样例

1       

3       

12      

0       

输出样例

2      

26     

531440

  1. 问题描述:(数字序列)有按下列公式定义的一个序列: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

  1. 问题描述:(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

  1. 问题描述:(分数数列)一个数列的前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;

}

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

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

评定成绩:

  • 26
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值