当前位置:首页 » 操作系统 » a算法例题

a算法例题

发布时间: 2022-04-19 02:34:13

算法与程序框图习题

一、选择题
1、根据算法的程序框图,当输入n=6时,输出的结果是( )

A.35 B.84

C.49 D.25
2、如图,汉诺塔问题是指有3根杆子A,B,C,杆子上有若干碟子,把所有的碟子从B杆移到A杆上,每次只能移动一个碟子,大的碟子不能叠在小的碟子上面,把B杆上的3个碟子全部移动到A杆上,最少需要移动的次数是( )
A.12 B.9 C.6 D.7
3、一程序框图如图1-1-25所示,它能判断任意输入的数x的奇偶性,其中判断框中的条件是( )

A.m=0 B.x=0 C.x=1 D.m=1

图1-1-25
4、阅读下面的程序框图并判断运行结果为…( )

A.55 B.-55

C.5 D.-5
5、给出下面的算法:该算法表示( )

S1 m=a;

S2 若b<m,则m=b;

S3 若c<m,则m=c;

S4 若d<m,则m=d;

S5 输出m.

A.a,b,c,d中最大值 B.a,b,c,d中最小值

C.将a,b,c,d由小到大排序 D.将a,b,c,d由大到小排序
6、下列关于算法的说法中,正确的是 ( )

A.求解某一类问题的算法是唯一的

B.算法必须在有限步操作之后停止

C.算法的每一步操作必须是明确的,不能有歧义或模糊

D.算法执行后一定产生确定的结果
7、算法共有三种逻辑结构,即顺序结构、条件分支结构和循环结构,下列说法正确的是( )

A.一个算法只能含有一种逻辑结构

B.一个算法最多可以包含两种逻辑结构

C.一个算法必须含有上述三种逻辑结构

D.一个算法可以含有上述三种逻辑结构的任意组合
8、下面的程序框图中是循环结构的是( )

A.①② B.②③ C.③④ D.②④
9、阅读下边的程序框图,若输入的n是100,则输出的变量S和T的值依次是( )
A.2 500,2 500 B.2 550,2 550

C.2 500,2 550 D.2 550,2 500
10、程序框是程序框图的一个组成部分,下面的对应正确的是 ( )

①终端框(起止框),表示一个算法的起始和结束 ②输入、输出框,表示一个算法输入和输出的信息 ③处理框(执行框),功能是赋值、计算 ④判断框,判断某一条件是否成立,成立时在出口处标明“是”或“Y”,不成立时标明“否”或“N”

A.(1)与①,(2)与②,(3)与③,(4)与④

B.(1)与④,(2)与②,(3)与①,(4)与③

C.(1)与①,(2)与③,(3)与②,(4)与④

D.(1)与①,(2)与③,(3)与④,(4)与②
二、填空题
1、已知函数f(x)=|x-3|程序框图1-1-26表示的是给定x值,求其相应函数值的算法.请将该程序框图补充完整.其中①处应填_______________,②处应填_______________.

图1-1-26

2、写出下列程序框图表示的算法功能.

(1)如1-1-14图(1)的算法功能是(a>0,b>b)____________________.

(2)如1-1-14图(2)的算法功能是_____________________.

图(1) 图(2)

图1-1-14

3、已知函数f(x)=|x-3|,下面的程序框图表示的是给定x值,求其相应函数值的算法.请将该程序框图补充完整.其中①处应填___________________________________________________.

②处应填_______________________________________________________________________.
4、指出程序框图1-1-24运行结果.

图1-1-24

若输入-4,则输出结果为_______________.

三、解答题
1、写出求方程ax2+bx+c=0的根的算法,画出相应的程序框图,并要求输出它的实根.
2、写出一个求解任意二次函数y=ax2+bx+c(a≠0)的最值的算法.
3、一把石子,3个3个地数,最后余下2个;5个5个地数,最后余下3个;7个7个地数,最后余下4个.请设计一个算法,求出这把石子至少有多少个.

⑵ A*算法的实际运用

估价值与实际值越接近,估价函数取得就越好
例如对于几何路网来说,可以取两节点间曼哈顿距离做为估价值,即f=g(n) + (abs(dx - nx) + abs(dy - ny));这样估价函数f在g值一定的情况下,会或多或少的受估价值h的制约,节点距目标点近,h值小,f值相对就小,能保证最短路的搜索向终点的方向进行。明显优于Dijkstra算法的毫无方向的向四周搜索。
conditions of heuristic
Optimistic (must be less than or equal to the real cost)
As close to the real cost as possible
详细内容:
创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
算起点的估价值;
将起点放入OPEN表; while(OPEN!=NULL){从OPEN表中取估价值f(n)最小的节点n;if(n节点==目标节点)break;for(当前节点n的每个子节点X){算X的估价值;if(XinOPEN)if(X的估价值小于OPEN表的估价值){把n设置为X的父亲;更新OPEN表中的估价值;//取最小路径的估价值}if(XinCLOSE)continue;if(Xnotinboth){把n设置为X的父亲;求X的估价值;并将X插入OPEN表中;//还没有排序}}//endfor将n节点插入CLOSE表中;按照估价值将OPEN表中的节点排序;//实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。}//endwhile(OPEN!=NULL)保存路径,即从终点开始,每个节点沿着父节点移动直至起点,这就是你的路径;
用C语言实现A*最短路径搜索算法 ,作者 Tittup frog(跳跳蛙)。 #include<stdio.h>#include<math.h>#defineMaxLength100//用于优先队列(Open表)的数组#defineHeight15//地图高度#defineWidth20//地图宽度#defineReachable0//可以到达的结点#defineBar1//障碍物#definePass2//需要走的步数#defineSource3//起点#defineDestination4//终点#defineSequential0//顺序遍历#defineNoSolution2//无解决方案#defineInfinity0xfffffff#defineEast(1<<0)#defineSouth_East(1<<1)#defineSouth(1<<2)#defineSouth_West(1<<3)#defineWest(1<<4)#defineNorth_West(1<<5)#defineNorth(1<<6)#defineNorth_East(1<<7)typedefstruct{signedcharx,y;}Point;constPointdir[8]={{0,1},//East{1,1},//South_East{1,0},//South{1,-1},//South_West{0,-1},//West{-1,-1},//North_West{-1,0},//North{-1,1}//North_East};unsignedcharwithin(intx,inty){return(x>=0&&y>=0&&x<Height&&y<Width);}typedefstruct{intx,y;unsignedcharreachable,sur,value;}MapNode;typedefstructClose{MapNode*cur;charvis;structClose*from;floatF,G;intH;}Close;typedefstruct//优先队列(Open表){intlength;//当前队列的长度Close*Array[MaxLength];//评价结点的指针}Open;staticMapNodegraph[Height][Width];staticintsrcX,srcY,dstX,dstY;//起始点、终点staticCloseclose[Height][Width];//优先队列基本操作voidinitOpen(Open*q)//优先队列初始化{q->length=0;//队内元素数初始为0}voidpush(Open*q,Closecls[Height][Width],intx,inty,floatg){//向优先队列(Open表)中添加元素Close*t;inti,mintag;cls[x][y].G=g;//所添加节点的坐标cls[x][y].F=cls[x][y].G+cls[x][y].H;q->Array[q->length++]=&(cls[x][y]);mintag=q->length-1;for(i=0;i<q->length-1;i++){if(q->Array[i]->F<q->Array[mintag]->F){mintag=i;}}t=q->Array[q->length-1];q->Array[q->length-1]=q->Array[mintag];q->Array[mintag]=t;//将评价函数值最小节点置于队头}Close*shift(Open*q){returnq->Array[--q->length];}//地图初始化操作voidinitClose(Closecls[Height][Width],intsx,intsy,intdx,intdy){//地图Close表初始化配置inti,j;for(i=0;i<Height;i++){for(j=0;j<Width;j++){cls[i][j].cur=&graph[i][j];//Close表所指节点cls[i][j].vis=!graph[i][j].reachable;//是否被访问cls[i][j].from=NULL;//所来节点cls[i][j].G=cls[i][j].F=0;cls[i][j].H=abs(dx-i)+abs(dy-j);//评价函数值}}cls[sx][sy].F=cls[sx][sy].H;//起始点评价初始值//cls[sy][sy].G=0;//移步花费代价值cls[dx][dy].G=Infinity;}voidinitGraph(constintmap[Height][Width],intsx,intsy,intdx,intdy){//地图发生变化时重新构造地inti,j;srcX=sx;//起点X坐标srcY=sy;//起点Y坐标dstX=dx;//终点X坐标dstY=dy;//终点Y坐标for(i=0;i<Height;i++){for(j=0;j<Width;j++){graph[i][j].x=i;//地图坐标Xgraph[i][j].y=j;//地图坐标Ygraph[i][j].value=map[i][j];graph[i][j].reachable=(graph[i][j].value==Reachable);//节点可到达性graph[i][j].sur=0;//邻接节点个数if(!graph[i][j].reachable){continue;}if(j>0){if(graph[i][j-1].reachable)//left节点可以到达{graph[i][j].sur|=West;graph[i][j-1].sur|=East;}if(i>0){if(graph[i-1][j-1].reachable&&graph[i-1][j].reachable&&graph[i][j-1].reachable)//up-left节点可以到达{graph[i][j].sur|=North_West;graph[i-1][j-1].sur|=South_East;}}}if(i>0){if(graph[i-1][j].reachable)//up节点可以到达{graph[i][j].sur|=North;graph[i-1][j].sur|=South;}if(j<Width-1){if(graph[i-1][j+1].reachable&&graph[i-1][j].reachable&&map[i][j+1]==Reachable)//up-right节点可以到达{graph[i][j].sur|=North_East;graph[i-1][j+1].sur|=South_West;}}}}}}intbfs(){inttimes=0;inti,curX,curY,surX,surY;unsignedcharf=0,r=1;Close*p;Close*q[MaxLength]={&close[srcX][srcY]};initClose(close,srcX,srcY,dstX,dstY);close[srcX][srcY].vis=1;while(r!=f){p=q[f];f=(f+1)%MaxLength;curX=p->cur->x;curY=p->cur->y;for(i=0;i<8;i++){if(!(p->cur->sur&(1<<i))){continue;}surX=curX+dir[i].x;surY=curY+dir[i].y;if(!close[surX][surY].vis){close[surX][surY].from=p;close[surX][surY].vis=1;close[surX][surY].G=p->G+1;q[r]=&close[surX][surY];r=(r+1)%MaxLength;}}times++;}returntimes;}intastar(){//A*算法遍历//inttimes=0;inti,curX,curY,surX,surY;floatsurG;Openq;//Open表Close*p;initOpen(&q);initClose(close,srcX,srcY,dstX,dstY);close[srcX][srcY].vis=1;push(&q,close,srcX,srcY,0);while(q.length){//times++;p=shift(&q);curX=p->cur->x;curY=p->cur->y;if(!p->H){returnSequential;}for(i=0;i<8;i++){if(!(p->cur->sur&(1<<i))){continue;}surX=curX+dir[i].x;surY=curY+dir[i].y;if(!close[surX][surY].vis){close[surX][surY].vis=1;close[surX][surY].from=p;surG=p->G+sqrt((curX-surX)*(curX-surX)+(curY-surY)*(curY-surY));push(&q,close,surX,surY,surG);}}}//printf(times:%d ,times);returnNoSolution;//无结果}constintmap[Height][Width]={{0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1},{0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},{0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1},{0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1},{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0},{0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0},{0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1},{0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0}};constcharSymbol[5][3]={□,▓,▽,☆,◎};voidprintMap(){inti,j;for(i=0;i<Height;i++){for(j=0;j<Width;j++){printf(%s,Symbol[graph[i][j].value]);}puts();}puts();}Close*getShortest(){//获取最短路径intresult=astar();Close*p,*t,*q=NULL;switch(result){caseSequential://顺序最近p=&(close[dstX][dstY]);while(p)//转置路径{t=p->from;p->from=q;q=p;p=t;}close[srcX][srcY].from=q->from;return&(close[srcX][srcY]);caseNoSolution:returnNULL;}returnNULL;}staticClose*start;staticintshortestep;intprintShortest(){Close*p;intstep=0;p=getShortest();start=p;if(!p){return0;}else{while(p->from){graph[p->cur->x][p->cur->y].value=Pass;printf((%d,%d)→ ,p->cur->x,p->cur->y);p=p->from;step++;}printf((%d,%d) ,p->cur->x,p->cur->y);graph[srcX][srcY].value=Source;graph[dstX][dstY].value=Destination;returnstep;}}voidclearMap(){//ClearMapMarksofStepsClose*p=start;while(p){graph[p->cur->x][p->cur->y].value=Reachable;p=p->from;}graph[srcX][srcY].value=map[srcX][srcY];graph[dstX][dstY].value=map[dstX][dstY];}voidprintDepth(){inti,j;for(i=0;i<Height;i++){for(j=0;j<Width;j++){if(map[i][j]){printf(%s,Symbol[graph[i][j].value]);}else{printf(%2.0lf,close[i][j].G);}}puts();}puts();}voidprintSur(){inti,j;for(i=0;i<Height;i++){for(j=0;j<Width;j++){printf(%02x,graph[i][j].sur);}puts();}puts();}voidprintH(){inti,j;for(i=0;i<Height;i++){for(j=0;j<Width;j++){printf(%02d,close[i][j].H);}puts();}puts();}intmain(intargc,constchar**argv){initGraph(map,0,0,0,0);printMap();while(scanf(%d%d%d%d,&srcX,&srcY,&dstX,&dstY)!=EOF){if(within(srcX,srcY)&&within(dstX,dstY)){if(shortestep=printShortest()){printf(从(%d,%d)到(%d,%d)的最短步数是:%d ,srcX,srcY,dstX,dstY,shortestep);printMap();clearMap();bfs();//printDepth();puts((shortestep==close[dstX][dstY].G)?正确:错误);clearMap();}else{printf(从(%d,%d)不可到达(%d,%d) ,srcX,srcY,dstX,dstY);}}else{puts(输入错误!);}}return(0);}

⑶ 兄弟姐妹 帮帮忙啦 跪求A*算法实例及C语言代码 最好能加上注释

A* 是逆矩阵 还是置 忘了

⑷ 排列a的算法是什么

计算方法:


(1)排列数公式


排列用符号A(n,m)表示,m≦n。


计算公式是:A(n,m)=n(n-1)(n-2)……(n-m+1)=n!/(n-m)!


此外规定0!=1,n!表示n(n-1)(n-2)…1


例如:6!=6x5x4x3x2x1=720,4!=4x3x2x1=24。


(2)组合数公式


组合用符号C(n,m)表示,m≦n。


公式是:C(n,m)=A(n,m)/m!或C(n,m)=C(n,n-m)。


例如:C(5,2)=A(5,2)/[2!x(5-2)!]=(1x2x3x4x5)/[2x(1x2x3)]=10。

两个常用的排列基本计数原理及应用:

1、加法原理和分类计数法:

每一类中的每一种方法都可以独立地完成此任务。两类不同办法中的具体方法,互不相同(即分类不重)。完成此任务的任何一种方法,都属于某一类(即分类不漏)。

2、乘法原理和分步计数法:

任何一步的一种方法都不能完成此任务,必须且只须连续完成这n步才能完成此任务。各步计数相互独立。只要有一步中所采取的方法不同,则对应的完成此事的方法也不同。

⑸ A*算法的其它算法

启发式搜索其实有很多的算法
比如:局部择优搜索法、最好优先搜索法等等。当然A*也是。这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的策略不同。像局部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去。这种搜索的结果很明显,由于舍弃了其他的节点,可能也把最好的节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。最好优先就聪明多了,他在搜索时,并没有舍弃节点(除非该节点是死节点),在每一步的估价中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”。这样可以有效的防止“最佳节点”的丢失。那么A*算法又是一种什么样的算法呢?

⑹ 求a/1+a/2+a/3算法题目

原题应为a+a^(-1)=3
设a^(1/2)+a^(-1/2)=t,
平方得:a+2+a^(-1)=t²
t²=5,t=±√5.
a^(3/2)+a^(-3/2)
=( a^(1/2)+a^(-1/2))( a-1+a^(-1))……(立方和公式)
=±2√5.

⑺ A*算法的原理

A* (A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。
注意是最有效的直接搜索算法。之后涌现了很多预处理算法(ALT,CH,HL等等),在线查询效率是A*算法的数千甚至上万倍。
公式表示为: f(n)=g(n)+h(n),
其中 f(n) 是从初始点经由节点n到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n) 是从n到目标节点最佳路径的估计代价。
保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取:
估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。并且如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
如果 估价值>实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。

⑻ 排列组合中A和C的算法怎么算的,查了百度都不会,求详细点的谢谢(高中)

排列数 A(n,m) ----------即 字母A右下角n 右上角m,表示n取m的排列数
A(n,m)=n!/(n-m)!=n*(n-1)*(n-2)*……*(n-m+1)
A(n,m)等于从n 开始连续递减的 m 个自然数的积
n取m的排列数 A(n,m) 等于从n 开始连续递减的 m 个自然数的积
例: A(7,3)=7*6*5=210
组合数 C(n,m) ----------即 字母C右下角n 右上角m,表示n取m的排列数
C(n,m)=n!/(m!*(n-m)!)=n*(n-1)*(n-2)*……*(n-m+1)/(1*2*3*……*m)
C(n,m)等于(从n 开始连续递减的 m 个自然数的积)除以(从1开始连续递增的 m 个自然数的积)
n选m的组合数 C(n,m) 等于(从n 开始连续递减的 m 个自然数的积)除以(从1开始连续递增的 m 个自然数的积)
例: C(7,3)=7*6*5/(1*2*3)=35

⑼ A*算法怎么验算

验算步骤如下:
a初值为12时,a+=a-=a*=a结果为0
步骤:
这个表达式的运算是从右向左的:
1.
a*=a:a=a*a=12*12=144
2.
a-=144:
a=a-144=144-144=0
3.
a+=0:
a=a+0=0+0=0。算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、JacquesHerbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年EmilLeonPost的Formulation1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。

热点内容
python获取当前路径下的文件夹 发布:2024-09-30 15:07:24 浏览:141
java解析xml数据 发布:2024-09-30 15:06:39 浏览:625
微信传输助手的文件夹 发布:2024-09-30 15:03:05 浏览:937
老电脑音乐服务器 发布:2024-09-30 15:02:20 浏览:317
连接linux下的数据库 发布:2024-09-30 14:58:29 浏览:609
语言翻译方法主要是编译型的解释 发布:2024-09-30 14:47:17 浏览:846
帮助跨站脚本 发布:2024-09-30 14:39:08 浏览:209
怎么对wps表格加密 发布:2024-09-30 14:20:39 浏览:158
amd编译代码 发布:2024-09-30 14:10:46 浏览:521
映射网络驱动器拒绝访问 发布:2024-09-30 13:55:46 浏览:446