递归算法习题

合集下载

递归基础练习题

递归基础练习题

递归基础练习题

递归基础练习题

1. 求1+2+3+……+n的值

2. 求1*2*3*……*n的值

3. 数的全排列问题。将n个数字1,2,…n的所有排列按字典顺序枚举出来

2 3 1

2 1 3

3 1 2

3 2 1

4. 数的组合问题。从1,2,…,n中取出m个数,将所有组合按照字典顺序列出。

如n=3,m=2时,输出:

1 2

1 3

2 3

9. 求两个数的最大公约数。

10. 求两个数的最小公倍数。

5. 小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现,只剩下一个桃子了.问第一天猴子共摘多少个桃子?

8. 著名的菲波拉契(Fibonacci)数列,其第一项为1,第二项为1,从第三项开始,其每一项都是前两项的和。编程求出该数列前N项数据。15. 梯有N阶,上楼可以一步上一阶,也可以一次上二阶。编一个程序,计算共有多少种不同的走法。

6. 有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?

7. 一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

11. 输入一个数,求这个数的各位数字之和。

12. 角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。

如:输入22,

算法分析与设计习题集整理

算法分析与设计习题集整理

算法分析与设计习题集整理

第一章算法引论

一、填空题:

1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。

2、多项式10()m m A n a n a n a =+++的上界为O(n m )。

3、算法的基本特征:输入、输出、确定性、有限性 、可行性 。

4、如何从两个方面评价一个算法的优劣:时间复杂度、空间复杂度。

5、计算下面算法的时间复杂度记为: O(n 3) 。

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

for(j=1;j<=n;j++)

{c[i][j]=0;

for(k=1;k<=n;k++)

c[i][j]= c[i][j]+a[i][k]*b[k][j];

}

6、描述算法常用的方法:自然语言、伪代码、程序设计语言、流程图、盒图、PAD 图。

7、算法设计的基本要求:正确性 和 可读性。

8、计算下面算法的时间复杂度记为: O(n 2) 。

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

{ y=y+1;

for (j =0;j <=2n ;j++ )

x ++;

}

9、计算机求解问题的步骤:问题分析、数学模型建立、算法设计与选择、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。

10、算法是指解决问题的 方法或过程 。

二、简答题:

1、按照时间复杂度从低到高排列:O( 4n 2)、O( logn)、O( 3n )、O( 20n)、O( 2)、O( n 2/3),

O( n!)应该排在哪一位?

答:O( 2),O( logn),O( n 2/3),O( 20n),O( 4n 2),O( 3n ),O( n!)

算法设计习题课

算法设计习题课

0.05 0.25 0.02 0.08
显然不是最优的,代价为: 33 2.43
最优解法
• 假如要对wleft到wright构建一棵最优二叉排序树,那么 这棵树的形式一定是根为wi,左子树的节点为left到 i-1,右子树的节点为i+1到right,左子树和右子树 也是最优的 • 设Cleft,right是树的代价,那么
22
怎样找出63分钱零钱
• 找出1分钱零钱和62分钱零钱分别需要的硬币数是 1和4。因此,63分钱需要使用五个硬币。 • 找出2分钱和61分钱分别需要2和4个硬币,一共是 六个硬币。 • 我们继续尝试所有的可能性。我们看到一个21分 和42分的分解,它可以分别用一个和两个硬币来 找开,因此,这个找零问题就可以用三个硬币解 决。 • 我们需要尝试的最后一种分解是31分和32分。我 们可以用两个硬币找出31分零钱,用三个硬币找 出32分零钱,一共是五个硬币。 • 因此最小值是三个硬币。 23
–设δ=min(dL,dR) –如果dC比δ大,则没必要计算。因此用于计算 dC的点必须落在分界线± δ的范围内,计算此 12 范围中点对的距离中的最小值
dL dR dC
δ
δ
13
优化
• 在最坏的情况下,所有的点都落在分界线
δ以内。但此时不一定要计算所有点对的 距离。只要两点的y坐标大于δ,这两点之 间的距离也不用算了。 • 假设该区间中的点按y坐标排序,则可得下 列算法

(完整word版)《数据结构》习题集:第9章_查找

(完整word版)《数据结构》习题集:第9章_查找

(完整word版)《数据结构》习题集:第9章_查找

第九章查找

1.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现

进行二分查找,则查找A[3]的比较序列的下标依次为( )

A. 1,2,3

B. 9,5,2,3

C. 9,5,3

D. 9,4,2,3

2.设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为()。

A. O(1)

B. O(log

2

n) C. O(n) D. O(n2) 5.设有序表中有1000个元素,则用二分查找查找元素X最多需要比较()次。

A. 25

B. 10

C. 7

D. 1

6.顺序查找不论在顺序线性表中还是在链式线性表中的时间复杂度为()。

A. O(n)

B. O(n2)

C. O(n1/2)

D. O(1og

2

n) 8.()二叉排序树可以得到一个从小到大的有序序列。

A. 先序遍历

B.中序遍历

C. 后序遍历

D. 层次遍历9.设一组初始记录关键字序列为(13,18,24,35,47,50,62,83,90,115,134),则利用二分法查找关键字90需要比较的关键字个数为()。

A. 1

B. 2

C. 3

D. 4

10.设某散列表的长度为100,散列函数H(k)=k % P,则P通常情况下最好选择()。

A. 99

B. 97

C. 91

D. 93

11.在二叉排序树中插入一个关键字值的平均时间复杂度为()。

A. O(n)

B. O(1og

2n) C. O(nlog

2

n) D. O(n2)

12.设一个顺序有序表A[1:14]中有14个元素,则采用二分法查找元素A[4]的过程中比较元素的顺序为( )。

计算机算法与设计复习题(含答案)

计算机算法与设计复习题(含答案)

1、一个算法的优劣可以用(时间复杂度)与(空间复杂度)与来衡量。

2、回溯法在问题的解空间中,按(深度优先方式)从根结点出发搜索解空间树。

3、直接或间接地调用自身的算法称为(递归算法)。

4、 记号在算法复杂性的表示法中表示(渐进确界或紧致界)。

5、在分治法中,使子问题规模大致相等的做法是出自一种(平衡(banlancing)子问题)的思想。

6、动态规划算法适用于解(具有某种最优性质)问题。

7、贪心算法做出的选择只是(在某种意义上的局部)最优选择。

8、最优子结构性质的含义是(问题的最优解包含其子问题的最优解)。

9、回溯法按(深度优先)策略从根结点出发搜索解空间树。

10、拉斯维加斯算法找到的解一定是(正确解)。

11、按照符号O的定义O(f)+O(g)等于O(max{f(n),g(n)})。

12、二分搜索技术是运用(分治)策略的典型例子。

13、动态规划算法中,通常不同子问题的个数随问题规模呈(多项式)级增长。14、(最优子结构性质)和(子问题重叠性质)是采用动态规划算法的两个基本要素。

15、(最优子结构性质)和(贪心选择性质)是贪心算法的基本要素。

16、(选择能产生最优解的贪心准则)是设计贪心算法的核心问题。

17、分支限界法常以(广度优先)或(以最小耗费(最大效益)优先)的方式搜索问题的解空间树。

18、贪心选择性质是指所求问题的整体最优解可以通过一系列(局部最优)的选择,即贪心选择达到。

19、按照活结点表的组织方式的不同,分支限界法包括(队列式(FIFO)分支限界法)和(优先队列式分支限界法)两种形式。

动态规划练习题(含答案)

动态规划练习题(含答案)

动态规划练习题

USACO 2.2 Subset Sums

题目如下:

对于从1到N的连续整集合合,能划分成两个子集合,且保证每个集合的数字和是相等的。

举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等的:

and {1,2}

这是唯一一种分发(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)

如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分发的子集合各数字和是相等的:

{1,6,7} and {2,3,4,5} {注1+6+7=2+3+4+5}

{2,5,7} and {1,3,4,6}

{3,4,7} and {1,2,5,6}

{1,2,4,7} and {3,5,6}

给出N,你的程序应该输出划分方案总数,如果不存在这样的划分方案,则输出0。程序不能预存结果直接输出。

PROGRAM NAME: subset

INPUT FORMAT

输入文件只有一行,且只有一个整数N

SAMPLE INPUT (file subset.in)

7

OUTPUT FORMAT

输出划分方案总数,如果不存在则输出0。

SAMPLE OUTPUT (file subset.out)

4

参考程序如下:

#include <fstream>

using namespace std;

const unsigned int MAX_SUM = 1024;

int n;

unsigned long long int dyn[MAX_SUM];

ifstream fin ("subset.in");

算法复习题

算法复习题

算法复习试题

一、名词解释:

1、算法:就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。

2、贪心算法:能够得到某种量度意义下的最优解的分级处理方法称为贪心算法。

3、分治法:分治法的求解思想就是把整个问题分成若干个小问题后分的治之

4、递归过程:一个递归过程的执行类似于多个子程序的嵌套调用,递归过程是自己调用自己本身代码。

递归算法的特点:思路清晰,算法的描述简洁且易理解。

5、集合:在研究某一类对象时,可把这类对象的整体称为集合。

6、生成树:设G=(V,E)是一个无向连通图。如果G的生成子图T=(V,E')是一棵树,则称T是G的一棵生成树。

7、算法具有以下5个属性:

有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

确定性:算法中每一条指令必须有确切的含义。不存在二义性。只有一个入口和一个出口

可行性:就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。

输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。

输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。

8、迭代法:称辗转法,是一种不断用变量的旧值递推出新值的解决问题的方法。

9、贪婪法: 是一种不追求最优解,只希望得到较为满意解的方法。贪婪法不要回溯

10、动态规划:是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。

11、分支限界法:是一种用于求解组合优化问题的排除非解的搜索算法。

12、树:树是一个或多个结点的有限集合。

数据结构(递归、数组、矩阵)练习题与答案

数据结构(递归、数组、矩阵)练习题与答案

数据结构(递归、数组、矩阵)练习题与答案

1、有一个三维数组A[-2..2][-4..5][2..6],其中元素个数是

()。

A.144

B.250

C.396

D.60

正确答案:B

解析:B、A的第1维长度为5,第2维长度为10,第3维长度为5,元素个数=5×10×5=250。

2、设C/C++二维数组a[m][n],每个数组元素占用k个存储单元,

第一个数组元素的存储地址是LOC(a[0][0]),求按行优先顺序存放

的数组元素a[i][j](0≤i≤m-1,0≤j≤n-1)的存储地址为()。

A.LOC(a[0][0])+[(j-1)×m+i-1]×k

B.LOC(a[0][0])+[i×n+j]×k

C.LOC(a[0][0])+[(i-1)×n+j-1]×k

D.LOC(a[0][0])+[j×m+i]×k

正确答案:B

解析: B、a[i][j]前面有0~i-1行,计i×n个元素,第i行前

面有j个元素,则a[i][j]前面有i×m+ j个元素,所以a[i][j]的

存储地址=LOC(a[0][0])+[i×n+j]×k。

3、设二维数组a[1..5][1..8],若按行优先的顺序存放数组的元素,则a[4][6]元素的前面有()个元素。

A.6

B.40

C.28

D.29

正确答案:D

解析:D、m=5,n=8,a[4][6]元素的前面的元素个数=(4-1) ×8+(6-1)=29。

4、设C/C++二维数组a[6][10],每个数组元素占用4个存储单元,若按行优先顺序存放所有数组元素,a[3][5]的存储地址为1000,则a[0][0]的存储地址是()。

算法分析期末试题集答案(6套)

算法分析期末试题集答案(6套)

内部资料,转载请注明出处,谢谢合作。

《算法分析与设计》期末复习题(一)

一、

选择题

1.应用Johnson 法则的流水作业调度采用的算法是(D )

A. 贪心算法

B. 分支限界法

C.分治法

D. 动态规划算法

2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi 塔问题的移动规则。由此设计出解Hanoi 塔问题的递归算法正确的为:(B ) Hanoi 塔

3. 动态规划算法的基本要素为(C)

A. 最优子结构性质与贪心选择性质

B.重叠子问题性质与贪心选择性质

C.最优子结构性质与重叠子问题性质

D. 预排序与递归调用

4. 算法分析中,记号O表示(B),记号Ω表示(A),记号Θ表示(D)。

A.渐进下界

B.渐进上界

C.非紧上界

D.紧渐进界

E.非紧下界

5. 以下关于渐进记号的性质是正确的有:(A)

A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))

=Θ=Θ⇒=Θ

B. f(n)O(g(n)),g(n)O(h(n))h(n)O(f(n))

==⇒=

C. O(f(n))+O(g(n)) = O(min{f(n),g(n)})

D. f(n)O(g(n))g(n)O(f(n))

=⇔=

6. 能采用贪心算法求最优解的问题,一般具有的重要性质为:(A )

A. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质 C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用

7. 回溯法在问题的解空间树中,按(D )策略,从根结点出发搜索解空间树。

第3章习题答案

第3章习题答案

习题3

1.名词解释:栈、队列、循环队列。

解:栈是只能在一端进行插入和删除操作的线性表,允许插入和删除的一端叫栈顶,另一端叫栈底。最后插入的元素最先删除,故栈也称后进先出表。

队列是允许在一端插入而在另一端删除的线性表,允许插入的一端叫队尾,允许删除的一端叫队头。最后插入的元素最先删除,故栈也称先进先出表。最先入队的元素最先删除,故队列也称先进先出表。

用常规意义下顺序存储结构的一维数组表示队列,由于队列的性质(队尾插入,队头删除),容易造成“假溢出”现象,即队尾已达到一维数组的高下标,不能再插入,然而队中元素个数小于队列的长度。循环队列是解决“假溢出”的一种方法。通常把一维数组看成首尾相接。在循环队列下,通常采用“牺牲一个存储空间”的方法解决“队满”和“队空”的判定问题。

2.如果输入序列为1,2,3,4,5,6,试问能否通过栈结构得到以下两个序列:4,3,5,6,1,2和1,3,5,4,2,6;请说明为什么不能或如何才能得到。

解:输入序列为1,2,3,4,5,6,不能得到4,3,5,6,1,2,其理由是:输出序列最后两个元素是1,2,前面四个元素(4,3,5,6)得到后,栈中元素剩下1,2,且2在栈顶,栈底元素1不可能在栈顶元素2出栈之前出栈。

得到序列1,3,5,4,2,6的过程是:1入栈并出栈;然后2和3依次入栈,3出栈,部分输出序列是1,3;紧接着4和5入栈,5,4和2依次出栈,此时输出序列为1,3,5,4,2;最后6入栈并出栈,得到最终结果序列是1,3,5,4,2,6。

3.试证明:若借助栈由输入序列1,2,…,n 得到序列1p ,2p ,…,n p (它是输入序列的一个全排列),则在输出序列中不可能出现下列情形:存在着i

小兔子跳格子数学题

小兔子跳格子数学题

小兔子跳格子数学题

小兔子是一个活泼可爱的动物,它喜欢玩跳格子的游戏。今天,小兔子准备挑

战一些数学题来锻炼自己的思维能力。让我们一起来看看小兔子跳格子数学题的答案吧!

第一题:如果小兔子一次可以跳1格或2格,那么跳到第10格一共有多少种

跳法呢?

解答:我们可以用递归的方法来解决这个问题。假设f(n)表示跳到第n格的跳

法总数,那么跳到第n格的方法数等于跳到第n-1格和跳到第n-2格的方法数之和。即f(n) = f(n-1) + f(n-2)。初始条件为f(1) = 1,f(2) = 2。根据这个递推关系,我们可以计算出跳到第10格的方法数为89种。

第二题:如果小兔子一次可以跳1格、2格或3格,那么跳到第10格一共有多

少种跳法呢?

解答:同样使用递归的方法,假设f(n)表示跳到第n格的跳法总数,那么跳到

第n格的方法数等于跳到第n-1格、跳到第n-2格和跳到第n-3格的方法数之和。

即f(n) = f(n-1) + f(n-2) + f(n-3)。初始条件为f(1) = 1,f(2) = 2,f(3) = 4。根据这个

递推关系,我们可以计算出跳到第10格的方法数为274种。

第三题:如果小兔子一次可以跳1格、2格或3格,但是不能连续跳2格,那

么跳到第10格一共有多少种跳法呢?

解答:这个问题稍微复杂一些,我们可以使用动态规划的方法来解决。假设

f(n)表示跳到第n格的跳法总数,我们可以分为两种情况:第n-1格跳了1格,第n 格跳1格或跳3格;第n-1格跳了2格,第n格跳1格。即f(n) = f(n-2) + f(n-1)。

算法第四版习题答案

算法第四版习题答案

1.1.1 给出以下表达式的值:

a. ( 0 + 15 ) / 2

b. 2.0e-6 * 100000000.1

c. true && false || true && true

答案:a.7,b.200.0000002 c.ture

1.1.2 给出以下表达式的类型和值:

a. (1 + 2.236)/2

b. 1 + 2 + 3 + 4.0

c. 4.1 >= 4

d. 1 + 2 + "3"

答案:a.1.618 b. 10.0 c.true d.33

1.1.3编写一个程序,从命令行得到三个整数参数。如果它们都相等则打印equal,否则打印not equal。

public class TestUqual

{

public static void main(String[] args)

{

int a,b,c;

a=b=c=0;

StdOut.println("Please enter three numbers");

a =StdIn.readInt();

b=StdIn.readInt();

c=StdIn.readInt();

if(equals(a,b,c)==1)

{

StdOut.print("equal");

}

else

{

StdOut.print("not equal");

}

}

public static int equals(int a ,int b , int c)

{

if(a==b&&b==c)

{

return 1;

}

else

{

return 0;

}

}

}

1.1.4下列语句各有什么问题(如果有的话)?

a. if (a > b) then c = 0;

数据结构与算法python语言实现第4章课后习题

数据结构与算法python语言实现第4章课后习题

数据结构与算法python语⾔实现第4章课后习题

R-4.1 对于⼀个含有n个元素的序列S,描述⼀个递归算法查找其最⼤值。所给出的递归算法时间复杂度和空间复杂度各是多少? python中三⽬运算符的写法

x if(x>y)) else y

def max(data,n):

if n==1:

return data[0]

else:

m=max(data,n-1)

return data[n-1] if(data[n-1]>m) else m

共执⾏n次递归调⽤,因为它花费恒定的时间执⾏⾮递归的部分 所以时间复杂度是O(n)

空间复杂度也是O(n)

R-4.2使⽤在代码段4-11中实现的传统函数,绘制出power(2,5)函数计算的递归跟踪

R-4.3如代码段4-12中实现的函数所⽰,使⽤重复平⽅算法,绘制出power(2,18)函数计算的递归跟踪

R-4.4 绘制函数reverse(S,0,5)(代码段4-10)执⾏的递归追踪,其中S=[4,3,6,2,6]

R-4.6 写⼀个递归函数,⽤于计算第n个调和数,其中 Hn=1+1/2+1/3+…+1/n

def harmonic(n):

if n==1:

return 1

else:

return harmonic(n-1)+1/n

print(harmonic(6))

R-4.7 写⼀个递归函数,它可以把⼀串数字转换成对应的整数

def tonum(data,m,n):

if m==len(data)-1:

return data[m]

else:

return data[m]*pow(10,n-1)+tonum(data,m+1,n-1)

NOIP《 数据结构》练习题及答案

NOIP《 数据结构》练习题及答案

习题:

1.设循环队列中数组的下标范围是1–n,其头尾指针分别为f和r,则其元素个数为(D).A.r- f B.r- f +1 C.(r- f ) MOD n+1 D.(r- f + n) MOD n 2.线性表若采用链表存贮结构,要求内存中可用存贮单元地址(D).

A.必须连续 B.部分地址必须连续 C.一定不连续 D.连续不连续均可3.下列叙述中,正确的是( D ).

A.线性表的线性存贮结构优于链表存贮结构

B.队列的操作方式是先进后出

C.栈的操作方式是先进先出

D.二维数组是指它的每个数据元素为一个线性表的线性表

4.在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为( C )

A.2

B.3

C.4

D.5

5.若已知一个栈的入栈顺序是1,2,3,…,n,其输出序列为P1,P2,P3,…,Pn,若P1是n,则Pi是( C )

A.i

B.n-1

C.n-i+1

D.不确定

6.如果一个栈初始时为空,且当前栈中的元素从栈底到栈顶依次为a,b,c(如图所示),另

有元素d已经出栈,则可能的入栈顺序是( D )。

A. a d c b

B. b a c d

C. a c b d

D. d a b c

7.( B )是一种先进先出的线性表

A. 栈

B. 队列

C. 哈希表(散列表)

D.二叉树

8.如果一棵二叉树中序遍历为BAC,那么它的先序遍历不可能是( C )。

A. ABC

B. CBA

C. ACB

D. BAC

9.元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。如果第1个出栈的是R3,那么第5个出栈的不可能是( B )。

算法复杂度习题

算法复杂度习题

算法复杂度习题

一、选择题

1.个算法应该是()。

A.程序

B.问题求解步骤的描述

C.要满足五个基本特性

D. A和C

2.某算法的时间复杂度为O(n2),表明该算法的()。

A.问题规模是n2

B.执行时间等于n2

C.执行时间与n2成正比

D.问题规模与n2成正比

3.以下算法的时间复杂度为()。

void fun(int n) {

int i=l;

while(i<=n)

i=i*2;

}

A. O(n)

B. O(n2)

C. O(nlog2n)

D. O(log2n)

4.【2011年计算机联考真题】

设n是描述问题规模的非负整数,下面程序片段的时间复杂度是()。

x=2;

while(x<="" p="">

x=2*x;

A. O(log2n)

B. O(n)

C. O(nlog2n)

D. O(n2)

5.【2012年计算机联考真题】

求整数n (n>=0)阶乘的算法如下,其时间复杂度是()。

int fact(int n){

if (n<=l) return 1;

return n*fact(n-1);

}

A. O(log2n)

B. O(n)

C. O(nlog2n)

D. O(n2)

6.有以下算法,其时间复杂度为()。

void fun (int n){

int i=0;

while(i*i*i<=n)

i++;

}

A. O(n)

B. O(nlogn)

C.

D.

7.程序段

for(i=n-l;i>l;i--)

for(j=1;j<i;j++)< p="">

if (A[j]>A[j+l])

算法设计与分析习题答案1-6章

算法设计与分析习题答案1-6章

习题1

1.

图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)提出并解决了该问题。七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼

斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经

过一次,图1.7是这条河以及河上的两个岛和七

座桥的草图。请将该问题的数据模型抽象出来,并判断此问题是否有解。

七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点 1, 一次步行

2, 经过七座桥,且每次只经历过一次 3, 回到起点

该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。

2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算法 1.r=m-n

2.循环直到r=0 2.1 m=n 2.2 n=r 2.3 r=m-n 3 输出m

3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代码和C ++描述。

//采用分治法

//对数组先进行快速排序 //在依次比较相邻的差 #include <iostream> using namespace std;

int partions(int b[],int low,int high) {

图1.7 七桥问题

int prvotkey=b[low];

b[0]=b[low];

while (low<high)

{

while (low<high&&b[high]>=prvotkey)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Biblioteka Baidu
相关文档
最新文档