ACM实习---------关于铺地板问题

1.8【问题描述】

有一长度为N(1<=<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?

例如,长度为4的地面一共有如下5种铺法:

4=1+1+1+1

4=2+1+1

4=1+2+1

4=1+1+2

4=2+2

编程用递归的方法求解上述问题。

【输入】  只有一个数N,代表地板的长度

【输出】  输出一个数,代表所有不同的瓷砖铺放方法的总数 

输入范例  4

【输出范例  5

2.需求分析

本演示程序用VC++6.0编写,完成一个数N1<=N<=10)由数个12的相加
 输入的形式和输入值的范围:只有一个正整N1<=N<=10,代表地板的长度。在所有输入中,元素的值都是整数
 输出的形式:输出一个数,代表所有不同的瓷砖铺放方法的总数 。
 程序所能达到的功能:完成一个数N1<=N<=10)由数个12的相加

 测试数据:
输入范例  4

【输出范例  5

3.概要设计

1在稿纸上算出1-10结果,找出其规律或者算出其结果的方法。为了实现上述程序功能,需要定义递归函数来实现

int f(int n)

{

int s;

if(n==1||n==2)s=n;

else s=f(n-1)+f(n-2);  

return s;              

}
2)本程序包含2个函数:
 主函数main()       
 斐波那契数列递归函数int f(int n)

各函数间关系如下:
main()              int f(int n)

4.详细设计

在稿纸上算出1-10结果,{1,1}{22}{33}{45}{58}{613}{721}{834}{955}{1089},是斐波那契数列的前部分。即利用此数列的规律来实现。即此数列被以递归的方法定义:F(0)=0F(1)=1, F(n)=F(n-1)+F(n-2)n>=2nN*

#include<stdio.h>

int f(int n)

{

int s;

if(n==1||n==2)s=n;

else s=f(n-1)+f(n-2);  //斐波那契数列,使用递归

return s;              //输出斐波那契数列(f(1)=1)第n个数

}

void main()

{

int n;

printf("请输入n:");  //输入地板长度

scanf("%d/n",&n);

if(n<1||n>10)          //判断输入的n值是否符合要求

printf("输入的n值不在范围内!\n");

else printf("%d\n",f(n));  //符合要求即调用函数f(n)

}

5.调试分析
#include<stdio.h>

int f(int n)

{

int s;

if(n==1||n==2)s=n;

else s=f(n-1)+f(n-2);  

return s;             时间复杂度为T(n)=O(1),空间复杂度为S(n)=O(1)

}

void main()

{

int n;

printf("请输入n:");  

scanf("%d/n",&n);

if(n<1||n>10)         

printf("输入的n值不在范围内!\n");

else printf("%d\n",f(n));  

}

调试时,先进入main()函数,然后执行输出语句来进行提示,执行输入语句,再根据判断输入的n值来执行相应的语句,要是是1就输出“输入的n值不在范围内!,要是0即调用f(n)函数。f(n)函数是一个递归函数,根据斐波那契数列的特点来求出结果。最后返回s,回到主函数来进行输出s值。

6.使用说明

程序名为1.exe,运行环境为VC++6.0。程序执行后显示


根据提示输入n值,点击换行,下一行就输出结果。

7.测试结果

1) 建立函数
» 输入:4

出:5

» 输入:-9

出:输入的n值不在范围内!

 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值