it算法经典笔试26题(编辑修改稿)内容摘要:
rSource=%s\n, GetSubString(strSource, strResult), strResult, strSource)。 } 1四个工人,四个任务,每个人做不同 的 任务需要的时间不同,求任务分配 的最优方案。 ( 2020年 5月 29日全国计算机软件资格水平考试 —— 软件设计师的算法题)。 include define N 4 int Cost[N][N] = { {2, 12, 5, 32}, // 行号:任务序号,列号:工人序号 {8, 15, 7, 11}, // 每行元素值表示这个任务由不同工人完成所需要的时间 {24, 18, 9, 6}, {21, 1, 8, 28}}。 int MinCost=1000。 int Task[N], TempTask[N], Worker[N]。 void Assign(int k, int cost) { if(k == N) { MinCost = cost。 for(int i=0。 iN。 i++) TempTask[i] = Task[i]。 } else { for(int i=0。 iN。 i++) { if(Worker[i]==0 amp。 amp。 cost+Cost[k][i] MinCost) { // 为提高效率而进行剪枝 Worker[i] = 1。 Task[k] = i。 Assign(k+1, cost+Cost[k][i])。 Worker[i] = 0。 Task[k] = 0。 } } } } int main(int argc, char* argv[]) { Assign(0, 0)。 printf(最佳方案总费用 =%d\n, MinCost)。 for(int i=0。 iN。 i++) /* 输出最佳方案 */ printf(\t任务 %d由工人 %d来做: %d\n, i, TempTask[i], Cost[i][TempTask[i]])。 } 1八皇后问题 , 输出 了 所有情况,不过有些 结果 只是旋转了 90度而已。 ( 回溯算法的典型例题 ,是数据结构书上算法的具体实现,大家都亲自动手写过这个程序吗。 ) define N 8 int Board[N][N]。 int Valid(int i, int j) { // 判断 下棋 位置是否 有效 int k = 1。 for(k=1。 i=k amp。 amp。 j=k。 k++) if(Board[ik][jk]) return 0。 for(k=1。 i=k。 k++) if(Board[ik][j]) return 0。 for(k=1。 i=k amp。 amp。 j+kN。 k++) if(Board[ik][j+k]) return 0。 return 1。 } void Trial(int i, int n) { // 寻找合适下棋位置 if(i == n) { for(int k=0。 kn。 k++) { for(int m=0。 mn。 m++) printf(%d , Board[k][m])。 printf(\n)。 } printf(\n)。 } else { for(int j=0。 jn。 j++) { Board[i][j] = 1。 if(Valid(i,j)) Trial(i+1, n)。 Board[i][j] = 0。 } } } int main(int argc, char* argv[]) { Trial(0, N)。 } 1 实现 strstr功能 ,即 在父串中 寻找子串 首次出现的位置。 (笔试中常让面试者实现标准库中的一些函数) char * strstring(char *ParentString, char *SubString) { char *pSubString, *pPareString。 for(char *pTmp=ParentString。 *pTmp。 pTmp++) { pSubString = SubString。 pPareString = pTmp。 while(*pSubString == *pPareString amp。 amp。 *pSubString != 39。 \039。 ) { pSubString++。 pPareString++。 } if(*pSubString == 39。 \039。 ) return pTmp。 } return NULL。 } int main(int argc, char* argv[]) { char *ParentString = happy birthday to you!。 char *SubString = birthday。 printf(%s,strstring(ParentString, SubString))。 } 1现在小明一家过一座桥,过桥的时候是黑夜,所以必须有灯。 现在小明过桥要1分 ,小明的弟弟要 3分 ,小明的爸爸要 6分 ,小明的妈妈要 8分 ,小明的爷爷要 12分。 每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后 30分 就会熄灭。 问小明一家如何过桥 时间最短。 ( 原本是个小小智力题,据说是外企的面试题,在 这里用程序来求解) include define N 5 define SIZE 64 // 将人员编号:小明 0,弟弟 1,爸爸 2,妈妈 3,爷爷 4 // 每个人的当 前位置: 0在桥左边, 1在桥右边 int Position[N]。 // 过桥临时方案的数组下标; 临时方案; 最小时间方案; int Index, TmpScheme[SIZE], Scheme[SIZE]。 // 最小过桥时间总和,初始值 100;每个人过桥所需要的时间 int MinTime=100, Time[N]={1, 3, 6, 8, 12}。 // 寻找最佳过桥方案。 Remnant:未过桥人数。 CurTime:当前已用时间。 // Direction:过桥方向 ,1向右 ,0向左 void Find(int Remnant, int CurTime, int Direction) { if(Remnant == 0) { // 所有人已经过桥,更新最少时间及方案 MinTime=CurTime。 for(int i=0。 iSIZE amp。 amp。 TmpScheme[i]=0。 i++) Scheme[i] = TmpScheme[i]。 } else if(Direction == 1) { // 过桥方向向右,从桥左侧选出两人过桥 for(int i=0。 iN。 i++) if(Position[i] == 0 amp。 amp。 CurTime + Time[i] MinTime) { TmpScheme[Index++] = i。 Position[i] = 1。 for(int j=0。 jN。 j++) { int TmpMax = (Time[i] Time[j] ? Time[i] : Time[j])。 if(Position[j] == 0 amp。 amp。 CurTime + TmpMax MinTime) { TmpScheme[Index++] = j。 Position[j] = 1。 Find(Remnant 2, CurTime + TmpMax, !Direction)。 Position[j] = 0。 TmpScheme[Index] = 1。 } } Positio。it算法经典笔试26题(编辑修改稿)
相关推荐
明法 method of utilization factor, lumen method 根据房间的几何形状、灯具的数量和类型确定工作面平均照度的计算法。 流明法既考虑直射光通量,也考虑反射光通量。 逐点法 point method 利用灯具的光度数据,算出面上各点照度的计算方法。 单位面积功率 power per unit area 单位被照面积上灯的安装功率。 照度比
对设置环境变量会很方便的 @echo off IF EXIST %1\bin\ ( rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量 @setx JAVA_HOME %1 @setx path %path%。 %JAVA_HOME%\bin @setx classpath %classpath%。 . @setx classpath %classpath%。
2) 星期日我去登山了,但是没有登顶。 3) 登上楼梯,上了二楼。 6,友達と相談する 、先生に相談する 补格助词と的一个功能是表示必须有 2个人的动作的对手。 如练习会话、打乒乓球、商量、打架等动词在执行时必须有对手,而且 2个人之间是平等的。 但是,有时,只有一方的要求,而另一方没有这样要求时,と就改成に,即:双向用と、单向用に。 这里注意,不一定所有的双向动作都改成单向,要考虑是否合理。
取阶段是指实施和收尾。 项目工作通常是通过一个 工作分解结构( WBS)来确定的。 WBS 是一个面向成果的文本资料,总体范围。 区分项目生命周期和产品生命周期是非常重要的。 项目生命周期可以用到所有类型的项目,不管项目生产什么产品。 而产品生命周期根据产品属性的不同却会有很大的不同。 每个项目在继续进入下一个阶段之前都必须顺利通过前面的每一个项目阶段。 有必要在每个项目阶段结束后进行管理评审
91范围内称为 B类地址; X在 192~ 223范围内称为 C类地址。 比如 ,因为 X为 10,在 1~ 126范围内,所以称为 A类地址。 类默认子网掩码: A类为。 B类为。 C类为。 当我们要划分子网用到子网掩码 M 时,类子网掩码的格式如下: A 类为 , B 类为 , C 类为。 M是相应的子网掩码,比如。 十进制计算基数是 256(下面,我们所有的十进制计算都要用 256来进行)
统的重叠模型。 在 MPLS中,每一路由器即为交换机,在传统的第三层的报头前加上固定长度标签( Label),通过这些标签,在每个 MPLS路由器中建立一个类似于传统路由表的标签路由表。 在转发数据报时,查找这些固定 长度的标签路由表以达到快速转发数据报,而传统的路由表查找采用的是最长前缀匹配法。 MPLS使用专用的标签分配协议( LDP),此协议用来建立传统的路由表和标签路由间的对应关系