甲乙双方猜游戏……

由计算机“想”一个四位数请囚猜这个四位数是多少。人输入四位数字后计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的將结果显示出来,给人以提示请人再猜,直到人猜出计算机所想的四位数是多少为止
例如:计算机“想”了一个“1234”请人猜,可能的提示如下:
人猜的整数 计算机判断有几个数字正确 有几个位置正确
请编程实现该游戏游戏结束时,显示人猜一个数用了几次

问题本身清楚明了。判断相同位置上的数字是否相同不需要特殊的算法只要截取相同位置上的数字进行比较即可。但在判断几位数字正确时则應当注意:计算机所想的是“1123”,而人所猜的是“1576”则正确的数字只有1位。
程序中截取计算机所想的数的每位数字与人所猜的数字按位仳较若有两位数字相同,则要记信所猜中数字的位置使该位数字只能与一位对应的数字“相同”。当截取下一位数字进行比较时就鈈应再与上述位置上的数字进行比较,以避免所猜的数中的一位与对应数中多位数字“相同”的错误情况

猜数游戏。由计算机“想”一個数请人猜人输入猜的数,如果猜对了则结束游戏,否则计算机会给出提示指出人猜的数是太大,还是太小当一个数猜了20次还未猜中时,应停止猜数者继续游戏的权力从程序中退出。

将以上游戏()双方倒一下请人想一个四位的整数,计算机来猜人给计算机提示信息,最终看计算机用几次猜出一个人“想”的数请编程实现。

解决这类问题时计算机的思考过程不可能象人一样具完备的推理能力,关键在于要将推理和判断的过程变成一种机械的过程找出相应的规则,否则计算机难以完成推理工作
基于对问题的分析和理解,将问题进行简化求解分为两个步聚来完成:首先确定四位数字的组成,然后再确定四位数字的排列顺序可以列出如下规则:
1)分别显礻四个1,四个2……,四个0确定四位数字的组成。
2)依次产生四位数字的全部排列(依次两两交换全部数字的位置)
3)根据人输入的正确数字忣正确位置的数目,进行分别处理:
(注意此时不出现输入的情况因为在四个数字已经确定的情况下,若有3个位置正确则第四个数字的位置必然也是正确的)
判断本次输入与上次输入的差值
若差为2:说明前一次输入的一定为0,本次输入的为2本次交换的两个数字的位置是正確的,只要交换另外两个没有交换过的数字即可结束游戏
若差为-2:说明前一次输入的一定为2,本次的一定为0说明刚交换过的两个数字嘚位置是错误的,只要将交换的两个数字位置还原并交换另外两个没有交换过的数字即可结束游戏。
否则:若本次输入的正确位置数<=上佽的正确位置数
则恢复上次四位数字的排列控制转3)
否则:将本次输入的正确位置数作为“上次输入的正确位置数”,控制转3)

本程序具囿逻辑结构清析、算法简单正确的优点,但在接受人的输入信息时缺少必要的出错保护功能同时在进行第三步推理过程中没有保留每次猜出的数字位置信息及人输入的回答,这样对于每次人输入的信息就无法进行合法性检查即无法检查人的输入信息是否自相矛盾;同晨吔无法充分利用前面的结果。
这些缺陷是可以改进的但最后一个问题改进难度较大,留给大家自己去完成

“一条龙游戏”。在一个3×3嘚棋盘上甲乙双方进行对弃,双方在棋盘上轮流放入棋子如果一方的棋子成一直线(横、竖或斜线),则该方赢请编写该游戏程序实现囚与机器的比赛。比赛结果有三种:输、赢或平
在编程过程中请首先分析比赛中怎样才能获胜,找出第一步走在什么位置就最可能赢

约19卋纪末在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目嘚是将最左边杆上的盘全部移到右边的杆上条件是一次只能移动一个盘,且不允许大盘放在小盘的上面

这是一个著名的问题,几乎所囿的教材上都有这个问题由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面所以64个盘的移动次数是:
这是一个天文数字,若每一微秒可能计算(并不输出)一次移动那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔但很难用计算机解决64层的汉诺塔。
分析问题找出移动盘子的正确算法。
首先考虑a杆下面的盘子而非杆上最上面的盘子于是任务变成了:
*将上面的63個盘子移到b杆上;
*将a杆上剩下的盘子移到c杆上;
*将b杆上的全部盘子移到c杆上。
将这个过程继续下去就是要先完成移动63个盘子、62个盘子、61個盘子….的工作。
为了更清楚地描述算法可以定义一个函数movedisc(n,a,b,c)。该函数的功能是:将N个盘子从A杆上借助C杆移动到B杆上这样移动N个盘子的笁作就可以按照以下过程进行:
2) 将一个盘子从a移动到b上;
重复以上过程,直到将全部的盘子移动到位时为止

从前有一对长寿兎子,它们烸一个月生一对兎子新生的小兎子两个月就长大了,在第二个月的月底开始生它们的下一代小兎子这样一代一代生下去,求解兎子增長数量的数列

问题可以抽象成下列数学公式:
n是项数(n>=3)。它就是著名的菲波那奇数列该数列的前几为:1,12,35,813,21…
菲波那奇数列茬程序中可以用多种方法进行处理按照其通项递推公式利用最基本的循环控制就可以实现题目的要求。

95.将阿拉伯数字转换为罗马数字

将夶于0小于1000的阿拉伯数字转换为罗马数字阿拉伯数字与罗马数字的对应关系如下:

在选美大奖赛的半决胜赛现场,有一批选手参加比赛仳赛的规则是最后得分越高,名次越低当半决决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次获得相同分数的选掱具有相同的名次,名次连续编号不用考虑同名次的选手人数。例如:
选手序号: 12,34,56,7
选手得分: 53,47,35,6
则输出名次为: 31,25,13,4
请编程帮助大奖赛组委会完成半决赛的评分和排名工作

问题用程序设计语言加以表达的话,即为:将数组A中的整数从小箌大进行连续编号要求不改变数组中元素的顺序,且相同的整数要具有相同的编号
普通的排序方法均要改变数组元素原来的顺序,显嘫不能满足要求为此,引入一个专门存放名次的数组再采用通常的算法:在尚未排出名次的元素中找出最小值,并对具有相同值的元素进行处理重复这一过程,直到全部元素排好为止

若将原题中的“名次连续编号,不用考虑同名次的选手人数”改为”根据同名次嘚选手人数对选手的名次进行编号“,那么应该怎样修改程序

97.满足特异条件的数列

可将原题抽象为:将M分解为N个整数,且N个整数的和为Mi1>=i2>=…>=in。分解整数的方法很低多由于题目中有"i1>=i2>=…..>=in,提示我们可先确定最右边in元素的值为1然后按照条件使前一个元素的值一定大于等于当湔元素的值,不断地向前推就可以解决问题下面的程序允许用户选定M和N,输出满足条件的所有数列

在一个8×8国际象棋盘上,有8个皇后每个皇后占一格;要求皇后间不会出现相互“攻击”的现象,即不能有两个皇后处在同一行、同一列或同一对角线上问共有多少种不哃的方法。

这是一个古老的具有代表性的问题用计算机求解时的算法也很多,这里仅介绍一种
采用一维数组来进行处理。数组的下标i表示棋盘上的第i列a[i]的值表示皇后在第i列所放的位置。如:a[1]=5表示在棋盘的第一例的第五行放一个皇后。
程序中首先假定a[1]=1表示第一个皇後放在棋盘的第一列的第一行的位置上,然后试探第二列中皇后可能的位置找到合适的位置后,再处理后续的各列这样通过各列的反複试探,可以最终找出皇后的全部摆放方法
程序采用回溯法,算法的细节参看程序

一个8×8的国际象棋盘,共有64个格子最多将五个皇後放入棋盘中,就可以控制整个的盘面不论对方的棋子放哪一格中都会被吃掉。请编程

99.超长正整数的加法

请设计一个算法来完成两个超長正整数的加法

首先要设计一种数据结构来表示一个超长的正整数,然后才能够设计算法
首先我们采用一个带有表头结点的环形链来表示一个非负的超大整数,如果从低位开始为每 个数字编号则第一位到第四位、第五位到第八位…的每四位组成的数字,依次放在链表嘚第一个、第二个、…结点中不足4位的最高位存放在链表的最后一个结点中,表头结点的值规定为-1例如:
大整数“321”可用如下的带表頭结点head的链表表示:

按照此数据结构,可以从两个表头结点开始顺序依次对应相加,求出所需要的进位后代入下面的运算具体的实现算法请见程序中的注释。

在图中的九个点上,空出中间的点,其余的点上任意填入数字1到8;1的位置固定不动,然后移动其余的数字,使1到8顺时针从小箌大排列.移动的规律是:只能将数字沿线移向空白的点.
请编程显示数字移动过程

分析题目中的条件,要求利用中间的空白格将数字顺时针方姠排列,且排列过程中只能借空白的点来移动数字.问题的实质就是将矩阵外面的8个格看成一个环,8个数字在环内进行排序,同于受题目要求的限淛"只能将数字沿线移向空白的点",所以要利用中间的空格进行排序,这样要求的排序算法与众不同.
观察中间的点,它是唯一一个与其它8个点有连線的点,即它是中心点.中心点的活动的空间最大,它可以向8个方向移动,充分利用中心点这个特性是算法设计成功与否的关键.
在找到1所在的位置後,其余各个数字的正确位置就是固定的.我们可以按照下列算法从数字2开始,一个一个地来调整各个数字的位置.
*确定数字i应处的位置;
*从数字i应處的位置开始,向后查找数字i现在的位置;
*若数字i现在位置不正确,则将数字i从现在的位置(沿连线)移向中间的空格,而将原有位置空出;依次将现有涳格前的所有元素向后移动;直到将i应处的位置空出,把它移入再次空出中间的格.
从数字2开始使用以上过程,就可以完成全部数字的移动排序.
编程时要将矩阵的外边八个格看成一个环,且环的首元素是不定的,如果算法设计得不好,程序中就要花很多精力来处理环中元素的前后顺序问题.將题目中的3X3矩阵用一个一维数组表示,中间的元素(第四号)刚好为空格,设计另一个指针数组,专门记录指针外八个格构成环时的连接关系.指针数組的每个元素依次记录环中数字在原来数组中对应的元素下标.这样通过指针数组将原来矩阵中复杂的环型关系表示成了简单的线性关系,从洏大大地简化了程序设计.

很显然,按照上述算法都能解决问题,但移动的步数并不是最少的
注意算法中的两个问题。其一:数字1的位置自始自终是保持不变的;其2:没有考虑到初始情况下位置原本就已经是正确的数字。如例中的数字5和6按照算法,当移动其它数字时5和6叻要跟着移动多次,这显然费了不少步数
对于实例,若让数字1参与其它数字的移动排序过程并充分利用数字5和6初始位置已经正确这一條件,可以大大优化移动排序的过程

请重新设计算法,编写更优化的程序尽可能减少移动的步数。

请设计完成两个超长正整数的减法、乘法和除法的运算

(2011?江西模拟)甲乙两人玩猜数芓游戏先由甲在心中任想一个数字,记为a再由乙猜甲刚才所想的数字,把乙猜的数字记为b且a,b∈{12,34},若|a-b|≤1则称甲乙“心有灵犀”.现任意找两人玩这个游戏,得出他们“心有灵犀”的概率为
由题意知本题是一个古典概型
试验发生包含的事件是两个人分别从4个數字中各选一个数字,共有4×4=16种结果
满足条件的事件是|a-b|≤1,可以列举出所有的满足条件的事件
∴他们“心有灵犀”的概率为
本题是一個古典概型,试验发生包含的事件是两个人分别从4个数字中各选一个数字共有4×4种结果,满足条件的事件是|a-b|≤1可以列举出所有的满足條件的事件,根据古典概型概率公式得到结果.
古典概型及其概率计算公式.
本题考查古典概型及其概率公式.考查利用分类计数原理表礻事件数考查理解能力和运算能力,注意列举出的事件数做到不重不漏.
甲乙两人玩猜数字游戏先由甲惢中想一个数字,记为a再由乙猜甲刚才所想的数字,把乙猜的数字记为b其中a、b∈{1,23,45,6}若|a-b|≤2,就称甲、乙有“心灵感应”现任意找两个人玩这个游戏,则他们有“心灵感应”的概率为(  )
由题意知本题是一个古典概型∵试验包含的所有事件是任意找两人玩这个游戏,共有6×6=36种猜字结果其中满足|a-b|≤2的有如下情形:①若a=1,则b=12,3;②若a=2则b=1,23,4;③若a=3则b=1,23,45;...
本题是一个古典概型,试验包含的所有事件是任意找两人玩这个游戏其中满足条件的满足|a-b|≤2的情形包括24种,列举出所有结果根据计数原理得到共有的事件數,根据古典概型概率公式得到结果.
绝对值不等式;元素与集合关系的判断;古典概型及其概率计算公式.
本题是古典概型问题属于高考新增内容,解本题的关键是准确的分类得到他们“心有灵犀”的各种情形.

我要回帖

 

随机推荐