《算法设计与分析报告》趣味题.docx

上传人:b****4 文档编号:1484492 上传时间:2022-10-22 格式:DOCX 页数:15 大小:133.60KB
下载 相关 举报
《算法设计与分析报告》趣味题.docx_第1页
第1页 / 共15页
《算法设计与分析报告》趣味题.docx_第2页
第2页 / 共15页
《算法设计与分析报告》趣味题.docx_第3页
第3页 / 共15页
《算法设计与分析报告》趣味题.docx_第4页
第4页 / 共15页
《算法设计与分析报告》趣味题.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《算法设计与分析报告》趣味题.docx

《《算法设计与分析报告》趣味题.docx》由会员分享,可在线阅读,更多相关《《算法设计与分析报告》趣味题.docx(15页珍藏版)》请在冰豆网上搜索。

《算法设计与分析报告》趣味题.docx

《算法设计与分析报告》趣味题

学号10770114

天津城市建设学院

《算法设计与分析》

实验报告一

 

学生

王哲

专业、班级

10软件1班

指导教师

唐国峰

成绩

 

电子与信息工程系

2012年10月10日

 

实验一:

递归策略运用练习

一、实验目的

本次实验是针对递归算法的算法设计及应用练习,旨在加深学生对该算法原理的理解,提高学生运用该算法解决问题的能力。

二、实验步骤与要求

1.实验前复习课程所学知识以及阅读和理解指定的课外阅读材料;

2.学生独自完成实验指定容;

3.实验结束后,用统一的实验报告模板编写实验报告。

4.提交说明:

(1)电子版提交说明:

a需要提交Winrar压缩包,文件名为“《算法设计与分析》实验一_学号_”,

如“《算法设计与分析》实验一_09290101_三”。

b压缩包为一个“《算法设计与分析》实验一_学号_”命名的顶层文件夹,

其下为两个文件夹,一个文件夹命名为“源程序”,另一个文件夹命名为“实验

报告电子版”。

其下分别放置对应实验成果物。

(2)打印版提交说明:

a不可随意更改模板样式。

b字体:

中文为宋体,大小为10号字,英文为TimeNewRoman,大小为10号

字。

c行间距:

单倍行距。

(3)提交截止时间:

2012年10月31日16:

00。

三、实验项目

1.运用递归策略设计算法实现下述题目的求解过程。

题目列表如下:

(1)运动会开了N天,一共发出金牌M枚。

第一天发金牌1枚加剩下的七分之一枚,第二天发金牌2枚加剩下的七分之一枚,第3天发金牌3枚加剩下的七分之一枚,以后每天都照此办理。

到了第N天刚好还有金牌N枚,到此金牌全部发完。

编程求N和M。

(2)国王分财产。

某国王临终前给儿子们分财产。

他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;给第二个儿子两份,再加上剩余财产的1/10;……;给第i个儿子i份,再加上剩余财产的1/10。

每个儿子都窃窃自喜。

以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。

请用程序回答,老国王共有几个儿子?

财产共分成了多少份?

(3)出售金鱼问题:

第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,在出售金鱼时不能把金鱼切开或者有任何破损的。

问这鱼缸里原有多少条金鱼?

(4)某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘客;到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个……,到了终点站车上还有乘客六人,问发车时车上的乘客有多少?

(5)猴子吃桃。

有一群猴子摘来了一批桃子,猴王规定每天只准吃一半加一只(即第二天吃剩下的一半加一只,以此类推),第九天正好吃完,问猴子们摘来了多少桃子?

(6)小华读书。

第一天读了全书的一半加二页,第二天读了剩下的一半加二页,以后天天如此……,第六天读完了最后的三页,问全书有多少钱页?

(7)日本著名数学游戏专家中村义作教授提出这样一个问题:

父亲将2520个桔子分给六个儿子。

分完后父亲说:

“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。

结果大家手中的桔子正好一样多。

问六兄弟原来手中各有多少桔子?

四、实验过程

(一)题目一:

运动会开了N天,一共发出金牌M枚。

第一天发金牌1枚加剩下的七分之一枚,第二天发金牌2枚加剩下的七分之一枚,第3天发金牌3枚加剩下的七分之一枚,以后每天都照此办理。

到了第N天刚好还有金牌N枚,到此金牌全部发完。

编程求N和M。

1.题目分析

分析此题,可以按照从第一天开始递归,每次和前一天的金牌剩余数的关系为:

(前一天金牌剩余数-当天为第几天)*6/7=当天金牌剩余数,递归终点为:

当某一天的前一天的金牌剩余数等于当天的天数,即为终止点。

2.算法构造

通过双重循环来寻找天数和金牌数,构造一个存放每天剩余金牌数的容器,我使用的是java语言,选择了LinkedList,在构造递归关系时候,主要要判断该天金牌数-天数之差是否能是7的倍数,如果不能,则设置为0,在后面的条件判断时候予以舍弃情况。

3.算法实现

importjava.util.LinkedList;

publicclassWork1{

/**

*authorWz

*/

/*

*题目要求:

运动会开了N天,一共发出金牌M枚。

第一天发金牌1枚加剩下的七分之一枚,第二天发金牌2枚加剩下的七分之一枚,

*第3天发金牌3枚加剩下的七分之一枚,以后每天都照此办理。

到了第N天刚好还有金牌N枚,到此金牌全部发完。

编程求N和M。

*/

publicstaticvoidmain(String[]args){

LinkedListlt=newLinkedList();

for(intn=3;n<10;n++){//逐次循环查找天数

for(intm=1;m<50;m++){//逐次递增寻找金牌枚数

lt.add(0,m);//一共m枚

//第n天剩下n枚

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

lt.add(i,giveout(lt.get(i-1),i));

}

if(lt.get(n-1)-n==0){

System.out.println("金牌数:

"+lt.get(0)+",天数:

"+n);

}

}

}

}

publicstaticintgiveout(intcount,intnowday){//分发金牌

if((count-nowday)%7!

=0)

return0;

else

return(count-nowday)*6/7;

}

}

4.运行结果

5.经验归纳

算法设计时,注意逻辑性的严谨,考虑情况要全面,条件判断位置要适宜。

(二)题目二:

国王分财产。

某国王临终前给儿子们分财产。

他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;给第二个儿子两份,再加上剩余财产的1/10;……;给第i个儿子i份,再加上剩余财产的1/10。

每个儿子都窃窃自喜。

以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。

请用程序回答,老国王共有几个儿子?

财产共分成了多少份?

1.题目分析

通过双重循环寻找儿子个数和份数,然后通过构造递归关系从而寻找到结果。

2.算法构造

通过一个linkedlist保存每次分后的剩余财产,在递归最后如果最后剩余财产为0,且最后一个儿子正好得到n份,则该循环的结果为提目要求的结果

3.算法实现

importjava.util.LinkedList;

publicclassWork2{

/**

*authorWz

*/

/*

*国王分财产。

某国王临终前给儿子们分财产。

他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;

*给第二个儿子两份,再加上剩余财产的1/10;给第i个儿子i份,再加上剩余财产的1/10。

*每个儿子都窃窃自喜。

以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。

请用程序回答,老国王共有几个儿子?

财产共分成了多少份?

*/

publicstaticvoidmain(String[]args){

LinkedListlt=newLinkedList();

for(intn=4;n<100;n++){//循环设置份数

for(intm=2;m<50;m++){//设置儿子个数

lt.add(0,n);//一共为1

for(inti=1;i<=m;i++){

lt.add(i,giveout(i,lt.get(i-1),n));//分给第i个儿子后剩下的财产为

}

if(lt.get(m)==0&<.get(m-1)==m){

System.out.println("一共分了"+n+"份,国王有:

"+m+"个儿子");

}else{

lt.clear();

}

}

}

}

publicstaticintgiveout(intindex,intleft,intn){//分财产

if((left-index)%10!

=0)

return0;

else

return9*(left-index)/10;

}

}

4.运行结果

5.经验归纳

(三)题目三:

出售金鱼问题:

第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,在出售金鱼时不能把金鱼切开或者有任何破损的。

问这鱼缸里原有多少条金鱼?

1.题目分析

通过循环设置条数,然后通过构造递归关系从而寻找到结果。

2.算法构造

通过递归,从最后11条金鱼开始逐次向前一天寻找。

3.算法实现

importjava.util.LinkedList;

publicclassWork3{

/**

*authorWz

*/

/*

*出售金鱼问题:

第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;

*第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,在出售金鱼时不能把金鱼切开或者有任何破损的。

问这鱼缸里原有多少条金鱼?

*/

publicstaticvoidmain(String[]args){

LinkedListlt=newLinkedList();

lt.add(0,11);//剩余11条

//第n天原有x条

inttemp=4;

for(inti=1;i<=4;i++){

lt.add(preday(temp,lt.get(i-1)));

temp--;

}

System.out.println("鱼缸里原来有:

"+lt.get(4)+"条金鱼");

}

publicstaticintpreday(intindex,intleft){//计算前一天的条数

return(left*(index+1)+1)/index;

}

}

4.运行结果

5.经

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1