﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-ssnail-文章分类-pages(zz)</title><link>http://www.blogjava.net/ssnail/category/1517.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:47:51 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:47:51 GMT</pubDate><ttl>60</ttl><item><title>2005年软件设计师考试题目预测(zz)</title><link>http://www.blogjava.net/ssnail/articles/5131.html</link><dc:creator>蜗牛</dc:creator><author>蜗牛</author><pubDate>Tue, 24 May 2005 11:19:00 GMT</pubDate><guid>http://www.blogjava.net/ssnail/articles/5131.html</guid><wfw:comment>http://www.blogjava.net/ssnail/comments/5131.html</wfw:comment><comments>http://www.blogjava.net/ssnail/articles/5131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ssnail/comments/commentRss/5131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ssnail/services/trackbacks/5131.html</trackback:ping><description><![CDATA[<SPAN class="a style17">&nbsp;&nbsp;1&nbsp;一笔画问题&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;迷宫问题&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;最短路径问题（就是给出一个交通示意图，边上的数字为路的长度，求每个结点到某个固定点的最短路程）&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;N个球称重问题吧&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;荷兰国旗问题????四色定理&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;3种颜色（0，1，2）在一个数组里，每次只可交换一次，扫描一边后，三种颜色自然分开，应为颜色为：红，白，蓝，（荷兰国旗的颜色）所以叫它荷兰国旗问题（也是他老人家的国籍）！&nbsp; <BR><BR>#include&nbsp;"stdio.h"&nbsp; <BR>#include&nbsp;"stdlib.h"&nbsp; <BR>#include&nbsp;"time.h"&nbsp; <BR><BR>#define&nbsp;N&nbsp;15&nbsp; <BR><BR>int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv[])&nbsp; <BR>{&nbsp; <BR>char&nbsp;array[N];&nbsp; <BR>char&nbsp;t,*p_red_end,*p_write_end,*p_blue_head;&nbsp;//分别为红色的尾指针、白色的尾指&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;针、蓝色的首指针&nbsp; <BR><BR>int&nbsp;i;&nbsp; <BR><BR>srand(&nbsp;(unsigned)time(&nbsp;NULL&nbsp;)&nbsp;);&nbsp; <BR>for(i=0;i&lt;N;i++)&nbsp; <BR>{&nbsp; <BR>switch&nbsp;(rand()%3)&nbsp; <BR>{&nbsp; <BR>case&nbsp;0:&nbsp;&nbsp; <BR>array=’r’;&nbsp; <BR>break;&nbsp; <BR>case&nbsp;1:&nbsp; <BR>array=’w’;&nbsp; <BR>break;&nbsp; <BR>default:&nbsp; <BR>array=’b’;&nbsp; <BR>}&nbsp; <BR>printf("%c&nbsp;",array);&nbsp; <BR>}&nbsp; <BR>printf("\n";&nbsp; <BR><BR>for(p_red_end=p_write_end=array,p_blue_head=array+14;p_write_end&lt;=p_blue_head&nbsp; <BR>switch&nbsp;(*p_write_end)&nbsp; <BR>{&nbsp; <BR>case&nbsp;’r’:&nbsp; <BR>t=*p_red_end;&nbsp; <BR>*p_red_end=*p_write_end;&nbsp; <BR>*p_write_end=t;&nbsp; <BR>p_red_end++;&nbsp; <BR>p_write_end++;&nbsp; <BR>break;&nbsp; <BR>case&nbsp;’b’:&nbsp; <BR>t=*p_write_end;&nbsp; <BR>*p_write_end=*p_blue_head;&nbsp; <BR>*p_blue_head=t;&nbsp; <BR>p_blue_head--;&nbsp; <BR>break;&nbsp; <BR>default:&nbsp; <BR>p_write_end++;&nbsp; <BR>}&nbsp; <BR>for(i=0;i&lt;N;i++)&nbsp; <BR>printf("%c&nbsp;",array);&nbsp; <BR>}&nbsp; <BR>运行结果是：&nbsp; <BR>rrrwwrwwrwbbbbb&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;这个结果是荷兰国旗算法的结果吗？（我不清楚荷兰国旗算法）&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;题目最终要求的结果应该是：红,白,兰,红,白,兰,红,白,兰……还是：红,红,红,红,红,白，白，白，白，蓝，蓝，蓝，蓝，蓝……？&nbsp; <BR><BR>#include&nbsp;"stdio.h"&nbsp; <BR>#define&nbsp;k&nbsp;15&nbsp;/*假定数组有15个数*/&nbsp; <BR>char&nbsp;a[k]={’r’,’w’,’b’,’r’,’r’,’b’,’w’,’w’,’b’,’b’,’b’,’w’,’r’,’r’,’w’};&nbsp;/*r,b,w代表红，&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;蓝，白*/&nbsp; <BR><BR>main()&nbsp; <BR>{int&nbsp;i,ii;&nbsp; <BR>char&nbsp;t;&nbsp; <BR>int&nbsp;m,n,p;&nbsp; <BR>m=0;&nbsp;/*m为红色末尾指针*/&nbsp; <BR>n=0;&nbsp;/*n为白色末尾指针*/&nbsp; <BR>p=14;/*p为蓝红色头指针*/&nbsp; <BR>for&nbsp;(ii=0;ii&lt;15;ii++)&nbsp; <BR>printf("%c",a[ii]);&nbsp; <BR>while(n&lt;=p)&nbsp; <BR>{&nbsp; <BR>if&nbsp;(a[n]==’r’)&nbsp;{t=a[n];a[n]=a[m];a[m]=t;m++;n++;}&nbsp; <BR>else&nbsp;if&nbsp;(a[n]==’w’)&nbsp;n++;&nbsp; <BR>else&nbsp;{&nbsp; <BR>t=a[n];a[n]=a[p];a[p]=t;p--;n++;&nbsp; <BR>if&nbsp;(a[n-1]==’r’)&nbsp;{t=a[n-1];a[n-1]=a[m];a[m]=t;m++;}&nbsp; <BR>}&nbsp; <BR><BR>for&nbsp;(i=0;i&lt;15;i++)&nbsp; <BR>prinrf("%s",a[n]);&nbsp; <BR><BR>}&nbsp; <BR><BR>&nbsp;&nbsp;货郎问题????&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;一笔画问题&nbsp; <BR><BR>const&nbsp;max=6;{顶点数为6}&nbsp; <BR>type&nbsp;shuzu=array[1..max,1..max]of&nbsp;0..max;&nbsp; <BR>const&nbsp;a:shuzu&nbsp;{图的描述与定义&nbsp;1:连通;0:不通}&nbsp; <BR>=((0,1,0,1,1,1),&nbsp; <BR>(1,0,1,0,1,0),&nbsp; <BR>(0,1,0,1,1,1),&nbsp; <BR>(1,0,1,0,1,1),&nbsp; <BR>(1,1,1,1,0,0),&nbsp; <BR>(1,0,1,1,0,0));&nbsp; <BR>var&nbsp; <BR>bianshu:array[1..max]of&nbsp;0..max;&nbsp;{与每一条边相连的边数}&nbsp; <BR>path:array[0..1000]of&nbsp;integer;&nbsp;{记录画法,只记录顶点}&nbsp; <BR>zongbianshu,ii,first,i,total:integer;&nbsp;&nbsp; <BR><BR>procedure&nbsp;output(dep:integer);&nbsp;{输出各个顶点的画法顺序}&nbsp; <BR>var&nbsp;sum,i,j:integer;&nbsp; <BR>begin&nbsp; <BR>inc(total);&nbsp; <BR>writeln(’total:’,total);&nbsp; <BR>for&nbsp;i:=0&nbsp;to&nbsp;dep&nbsp;do&nbsp;write(Path);writeln;&nbsp; <BR>end;&nbsp; <BR><BR><BR>function&nbsp;ok(now,i:integer;var&nbsp;next:integer):boolean;{判断第I条连接边是否已行过}&nbsp; <BR>var&nbsp;j,jj:integer;&nbsp; <BR>begin&nbsp; <BR>j:=0;&nbsp;jj:=0;&nbsp; <BR>while&nbsp;jj&lt;&gt;i&nbsp;do&nbsp;begin&nbsp;inc(j);if&nbsp;a[now,j]&lt;&gt;0&nbsp;then&nbsp;inc(jj);end;&nbsp; <BR>next:=j;&nbsp; <BR>{判断当前顶点的第I条连接边的另一端是哪个顶点,找出后赋给NEXT传回}&nbsp; <BR>ok:=true;&nbsp; <BR>if&nbsp;(a[now,j]&lt;&gt;1)&nbsp;then&nbsp;ok:=false;&nbsp;{A[I,J]=0:原本不通}&nbsp; <BR>end;&nbsp;{&nbsp;=2:曾走过}&nbsp; <BR><BR>procedure&nbsp;init;&nbsp;{初始化}&nbsp; <BR>var&nbsp;i,j&nbsp;:integer;&nbsp; <BR>begin&nbsp; <BR>total:=0;&nbsp;{方案总数}&nbsp; <BR>zongbianshu:=0;&nbsp;{总边数}&nbsp; <BR>for&nbsp;i:=1&nbsp;to&nbsp;max&nbsp;do&nbsp; <BR>for&nbsp;j:=1&nbsp;to&nbsp;max&nbsp;do&nbsp; <BR>if&nbsp;a[i,j]&lt;&gt;0&nbsp;then&nbsp;begin&nbsp;inc(bianshu);inc(zongbianshu);end;&nbsp; <BR>{求与每一边连接的边数bianshu}&nbsp; <BR>zongbianshu:=zongbianshu&nbsp;div&nbsp;2;&nbsp;{图中的总边数}&nbsp; <BR>end;&nbsp; <BR><BR>procedure&nbsp;find(dep,nowpoint:integer);&nbsp;{dep:画第几条边;nowpoint:现在所处的顶点}&nbsp; <BR>var&nbsp;i,next,j:integer;&nbsp; <BR>begin&nbsp; <BR>for&nbsp;i:=1&nbsp;to&nbsp;bianshu[nowpoint]&nbsp;do&nbsp;{与当前顶点有多少条相接,则有多少种走法}&nbsp; <BR>if&nbsp;ok(nowpoint,i,next)&nbsp;then&nbsp;begin&nbsp;{与当前顶点相接的第I条边可行吗?}&nbsp; <BR>{如果可行,其求出另一端点是NEXT}&nbsp; <BR>a[nowpoint,next]:=2;&nbsp;a[next,nowpoint]:=2;&nbsp;{置成已走过标志}&nbsp; <BR>path[dep]:=next;&nbsp;{记录顶点,方便输出}&nbsp; <BR>if&nbsp;dep&nbsp;&lt;&nbsp;zongbianshu&nbsp;then&nbsp;find(dep+1,next)&nbsp;{未搜索完每一条边}&nbsp; <BR>else&nbsp;output(dep);&nbsp; <BR>path[dep]:=0;&nbsp;{回溯}&nbsp; <BR>a[nowpoint,next]:=1;&nbsp;a[next,nowpoint]:=1;&nbsp; <BR>end;&nbsp; <BR><BR>begin&nbsp; <BR>init;&nbsp;{初始化,求边数等}&nbsp; <BR>for&nbsp;first:=1&nbsp;to&nbsp;max&nbsp;do&nbsp;{分别从各个顶点出发,尝试一笔画}&nbsp; <BR>fillchar(path,sizeof(path),0);&nbsp; <BR>path[0]:=first;&nbsp;{记录其起始的顶点}&nbsp; <BR>writeln(’from&nbsp;point&nbsp;’,first,’:’);readln;&nbsp; <BR>find(1,first);&nbsp;{从起始点first,一条边一条边地画下去}&nbsp; <BR>end.&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;银行家算法其实是很普通的但是比较经典的算法，每本OS的书上都讲的，主要用来防止产生死锁的，&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;形象的讲：银行发放贷款（对不同的客户，有分期贷的）不能使有限可用资金匮乏而导致整个银行无法运转，也就是说每次请求贷款时，银行要考虑他能否凭着贷款完成项目还清贷款使银行运转正常，&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;（借用flyingcoolhwak写的步骤）&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;令Request(i)是进程P(i)请求向量，如果Request(i)[j]=k，则进程P(i)希望请求j类资源k个。&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;算法步骤如下：&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;1、如果Request(i)&gt;Need(i)则出错(请求量超过申报的最大量),否则转2、&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;2、如果Requdst(i)&gt;Available则P(i)等待，否则转3、&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;3、系统对P(i)所请求的资源实施试探分配，更改数据结构中的数值&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;4、Available&lt;-Available-Request(i)&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocation(i)&lt;-Allocation(i)+Request(i)&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Need(i)&lt;-Need(i)-Request(i)&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;5、执行安全性算法(如下)，如果是安全的则承认试分配，否则废除试分配，让进程P(i)等待&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;货郎担问题&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;问题描述&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;欧几里德货郎担问题是对平面给定的n个点确定一条连结各点的、闭合的游历路线问题。图1(a)给出了七个点问题的解。Bitonic旅行路线问题是欧几里德货郎担问题的简化，这种旅行路线先从最左边开始，严格地由左至右到最右边的点，然后再严格地由右至左到出发点，求路程最短的路径长度。图1（b）给出了七个点问题的解。&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;请设计一种多项式时间的算法，解决Bitonic旅行路线问题&nbsp; </SPAN><img src ="http://www.blogjava.net/ssnail/aggbug/5131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ssnail/" target="_blank">蜗牛</a> 2005-05-24 19:19 <a href="http://www.blogjava.net/ssnail/articles/5131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>