历届编程逻辑题noip.docx
《历届编程逻辑题noip.docx》由会员分享,可在线阅读,更多相关《历届编程逻辑题noip.docx(11页珍藏版)》请在冰豆网上搜索。
历届编程逻辑题noip
1、一个家具公司生产桌子和椅子。
现有113个单位的木材。
每张桌子要使用20个单位的木材,售价是30元;每张椅子要用16个单位的木材,售价是20元。
使用已有的木材生产桌椅(不一定要用光木材)做多可以买_____元钱。
2、75名儿童去游乐场玩。
他们可以骑旋转木马,坐滑行轨道,乘宇宙飞船。
已知其中20人这三种东西都玩过,55人至少玩过其中两种。
若每玩一样的费用为5元,游乐场总共收入700,可知有_____名儿童没有玩过其中任何一种。
3、将数组{32,74,25,53,28,43,86,47}中的元素按从小到大的顺序排列,每次可以交换任意两个元素,最少需要交换_________次。
4、有3个课外小组:
物理组,化学组和生物组。
今有张、王、李、赵、陈5名同学,已知张、王为物理组成员,张、李、赵为化学组成员,李、赵、陈为生物组成员。
如果要在3个小组中分别选出3位组长,一位同学最多只能担任一个小组的组长,共有种___________选择方案。
5、(寻找假币)现有80枚硬币,其中有一枚是假币,其重量稍轻,所有真币的重量都相同,如果使用不带砝码的天平称重,最少需要称几次,就可以找出假币?
你还要指出第1次的称重方法。
请写出你的结果:
_________________________________________________。
6、(取石子游戏) 现有5堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取),取最后一颗石子的一方获胜。
甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?
如果有,甲第一步应该在哪一堆里取多少?
请写出你的结果:
_________________________________________________。
B
7、(子集划分)将n个数(1,2,…,n)划分成r个子集。
每个数都恰好属于一个子集,任何两个不同的子集没有共同的数,也没有空集。
将不同划分方法的总数记为S(n,r)。
例如,S(4,2)=7,这7种不同的划分方法依次为{
(1),(234)},{
(2),(134)},{(3),(124)},{(4),(123)},{(12),(34)},{(13),(24)},{(14),(23)}。
当n=6,r=3时,S(6,3)=______________。
(提示:
先固定一个数,对于其余的5个数考虑S(5,3)与S(5,2),再分这两种情况对原固定的数进行分析。
)
8、(最短路线)某城市的街道是一个很规整的矩形网络(见下图),有7条南北向的纵街,5条东西向的横街。
现要从西南角的A走到东北角的B,最短的走法共有多少种?
___________
A
9、书架上有4本不同的书A、B、C、D。
其中A和B是红皮的,C和D是黑皮的。
把这4本书摆在书架上,满足所有黑皮的书都排在一起的摆法有_________种。
满足A必须比C靠左,所有红皮的书要摆在一起,所有黑皮的书要摆放在一起,共有_________种摆法。
10、有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,则城市1到城市6的最短距离为__________________。
城市1
城市2
城市3
城市4
城市5
城市6
城市1
0
2
3
1
12
15
城市2
2
0
2
5
3
12
城市3
3
2
0
3
6
5
城市4
1
5
3
0
7
9
城市5
12
3
6
7
0
2
城市6
15
12
5
9
2
0
11、小陈现有2个任务A,B要完成,每个任务分别有若干步骤如下:
A=a1->a2->a3,B=b1->b2->b3->b4->b5。
在任何时候,小陈只能专心做某个任务的一个步骤。
但是如果愿意,他可以在做完手中任务的当前步骤后,切换至另一个任务,从上次此任务第一个未做的步骤继续。
每个任务的步骤顺序不能打乱,例如……a2->b2->a3->b3……是合法的,而……a2->b3->a3->b2……是不合法的。
小陈从B任务的b1步骤开始做,当恰做完某个任务的某个步骤后,就停工回家吃饭了。
当他回来时,只记得自己已经完成了整个任务A,其他的都忘了。
使计算小陈饭前已做的可能的任务步骤序列共有__________种。
12、有如下的一段程序:
1. a:
=1;
2. b:
=a;
3. d:
=-a;
4. e:
=a+d;
5. c:
=2*d;
6. f:
=b+e-d;
7. g:
=a*f+c;
现在要把这段程序分配到若干台(数量充足)用电缆连接的PC上做并行执行。
每台PC执行其中的某几个语句,并可随时通过电缆与其他PC通讯,交换一些中间结果。
假设每台PC每单位时间可以执行一个语句,且通讯花费的时间不计。
则这段程序最快可以在_______单位时间内执行完毕。
注意:
任意中间结果只有在某台PC上已经得到,才可以被其他PC引用。
例如若语句4和6被分别分配到两台PC上执行,则因为语句6需要引用语句4的计算结果,语句6必须在语句4之后执行。
13、LZW编码是一种自适应词典编码。
在编码的过程中,开始时只有一部基础构造元素的编码词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的編码会被追加到词典中,并用于后继信息的编码。
举例说明,考虑一个待编码的信息串:
“xyxyyyyxyx”。
初始词典只有3个条目,第一个为x,编码为1:
第二个为y,编码为2:
第二个为空格,编码为3:
于是串“xyx”的编码为1-2-1(其中-为编码分隔符),加上后面的一个空格就是1-2-1-3。
但由于有了一个空格,我们就知道前面的“xyx”是一个单而由于该单词没有在词典中,我们就可以自适应的把这个词条添加到词典里,编码为4,然后按照新的词典对后继信息进行编码,以此类推。
于是,最后得到编码:
1-2-1-3-2-2-3-5-3-4。
现在己知初始词典的3个条目如上述,则信息串“yyxyxxyyxyxyxxxxyx”的编码是______________。
14、队列快照是指在某一时刻队列中的元素组成的有序序列。
例如,当元素1、2、3入队,元素1出队后,此刻的队列快照是“23”。
当元素2,3也出队后,队列快照是“”,即为空。
现有3个正整数元素依次入队、出队。
己知它们的和为8,则共有_________种可能的不同的队列快照(不同队列的相同快照只计一次)。
例如,“51”“422”、“”都是可能的队列快照;而"7"不是可能的队列快照,因为剩下的2个正整数的和不可能是1。
15、每份考卷都有一个8位二进制序列号。
当且仅当一个序列号含有偶数个1时,它才是有效的。
例如,00000000、01010011都是有效的序列号,而11111110不是。
那么,有效的序列号共有________个。
16、定义字符串的基本操作为:
删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。
将字符串A变成字符串B的最少操作步数,称为字符串A到字符串B的编辑距离。
字符串"ABCDEFG"到字符串"BADECG"的编辑距离为________。
17、如果平面上任取n个整点(横纵坐标都是整数),其中一定存在两个点,它们连线的中点也是整点,那么n至少是__________。
18、在NOI期间,主办单位为了欢迎来自各国的选手,举行了盛大的晚宴。
在第十八桌,有5名大陆选手和5名港澳选手共同进膳。
为了增进交流,他们决定相隔就坐,即每个大陆选手左右旁都是港澳选手,每个港澳选手左右旁都是大陆选手。
那么,这一桌一共有_______种不同的就坐方案。
注:
如果在两个方案中,每个选手左右相邻的选手相同,则视为同一种方案。
19、7个同学围坐一圈,要选2个不相邻的作为代表,有_______种不同的选法。
20、某系统自称使用了一种防窃听的方式验证用户密码。
密码是n个数s1,s2,…,sn,均为0或1。
该系统每次随机生成n个数a1,a2,…,an,均为0或1,请用户回答(s1a1+s2a2+…+snan)除以2的余数。
如果多次的回答总是正确,即认为掌握密码。
该系统认为,即使问答的过程被泄露,也无助于破解密码——因为用户并没有直接发送密码。
然而,事与愿违。
例如,当n=4时,有人窃听了以下5次问答:
就破解出了密码s1=________,s2=_______,s3=_________,s4=________。
21、把M个同样的球放到N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?
(用K表示)。
例如:
M=7,N=3时,K=8;在这里认为(5,1,1)和(1,5,1)是同一种放置方法。
问:
M=8,N=5时,K=。
22、如图所示,图中每条边上的数字表示该边的长度,则从A到E的最短距离是_____。
23、重新排列1234使得每一个数字都不在原来的位置上,一共有_________种排法。
24、一棵结点数为2015的二叉树最多有_________个叶子结点。
25、从一个4×4的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格,共有_________种方法。
26、约定二叉树的根节点高度为1。
一棵结点数为2016的二叉树最少有_________个叶子结点;一棵结点数为2016的二叉树最小的高度值是_________。
27、在a,b,c,d,e,f六件物品中,按下面的条件能选出的物品是:
________________
(1)a,b两样至少有一样
(2)a,d不能同时取
(3)a,e,f中必须有2样
(4)b,c要么都选,要么都不选
(5)c,d两样中选一样
(6)若d不选,则e也不选
28、平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。
问用这些点为顶点,能组成_________个不同三角形。
29、如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。
其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。
现已知第一个到达出口的是3号车厢,所有可能的到达出口的车厢排列方式共有____________种。
(不必给出每种排列)。
出口←
←
12345
S↓
30、将N个红球和M个黄球排成一行。
例如:
N=2,M=3可得到以下6种排法:
红红黄黄黄红黄红黄黄红黄黄红黄黄红红黄黄黄红黄红黄黄黄黄红红
问题:
当N=4,M=3时有__________种不同排法。
(不用列出每种排法)
31、现在市场上有一款汽车A很热销,售价是2万美元。
汽车A每加仑汽油可以行驶20英里。
普通汽车每年大约行驶12000英里。
油价是每加仑1美元。
不久我公司就要推出新款节油汽车B,汽车B每加仑汽油可以行驶30英里。
现在我们要为B制定价格(它的价格略高于A):
我们预计如果用户能够在两年内通过节省油钱把B高出A的价钱弥补回来,则他们就会购买B,否则就不会购买B。
那么B的最高价格应为___________万美元。
32、无向图G有16条边,有3个4度顶点、4个3度顶点,其余顶点的度均小于3,则G至少有___________个顶点。
1
160元
2
10人
3
5次
4
11种
5
4次第一步:
分成3组:
27,27,26,将前2组放到天平上
6
有获胜策略,第1次在第5堆中取32颗石子
7
90
8
210
9
124
10
7(1->2->5->6)
11
70
12
5
13
2-2-1-2-3-1-1-3-4-3-1-2-1-3-5-3-6(或22123113431213536)
14
49
15
128
16
3
17
5
18
2880
19
14
20
0111
21
18
22
11
23
9
24
1008
25
72
26
111
27
a,b,c,f
28
751
29
8
30
35
31
2.04
32
11
例2:
2.(取石子游戏)现有5堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取),取最后一颗石子的一方获胜.甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)如果有,甲第一步应该在哪一堆里取多少请写出你的结果
第一题比较简单,可以推广到有n根火柴每人可取1到m根
若n%(m+1)==1则先取必败,否则必胜,这个比较好证明
很简单可以证明当火柴数为1时先取必败,然后火柴数为m+1时,无论先取的人怎样取,假定取x个,那么第二个人取m-x个,即可只剩一个留给对方。
这样一直下来,如果用D(x)=1表示当留有x个火柴时先取必败,那么
D
(1)=1
D(m+2)=1
D(2m+3)=1
........
在这道题的情况就是
D
(1)=1
D(4)=1
D(7)=1
.........
所以刚开始这些情况是必败的,换言之,如果刚开始不是这种情况,则先取的人可以取n%(m+1)-1个(注意n%(m+1)==0的情况,这是应该是取m个),就可以转化成上述令对手必败的情况。
第二题比较麻烦
我这里正好有一个别人写的
只有一堆时,无论有多少,先取者都可以一次性全部取走,所以必胜。
(1,1)时,显然先取者必败。
(1,2)时,先取者必胜,他可以在2那一堆中取1个,于是变成(1,1),但这成为上一种情况了,于是接下来取的人必败,亦即先取者必胜。
(1,3)时,先取者必胜。
他可以在3那一堆中取2个,于是变成(1,1)。
(2,2)时,先取者必败。
他在任何一堆中取1个,对方随即在另一堆中取1个,即变成(1,1);如果他取走一堆中的全部石子,对方即取走另一堆中的全部石子。
(2,3)时,先取者必胜。
他可以在3那一堆中取1个,于是变成(2,2)。
(3,3)时,先取者必败。
他取走任一堆中的1,2或3个,就变成了以上讨论过的情形。
(1,1,1)时,先取者必胜。
他取走任一堆,就变成了(1,1)。
(1,1,2)时,先取者必胜。
他取走2那一堆,就变成了(1,1)。
(1,1,3)时,先取者必胜。
他取走3那一堆,就变成了(1,1)。
(1,2,2)时,先取者必胜。
他取走1那一堆,就变成了(2,2)。
(1,2,3)时,先取者必败。
分析如下:
他先取1那一堆,则变为(2,3),由上面的分析,对手必胜。
他从2那一堆中取1个,就变成了(1,1,3),对手可以将3那一堆全部取走,变成了(1,1),于是必胜。
他将2那一堆全部取走,就变成了(1,3),对手必胜。
他从3那一堆中取1个,就变成了(1,2,2),对手必胜。
他从3那一堆中取2个,就变成了(1,2,1),对手必胜。
他将3那一堆全部取走,就变成了(1,2),对手必胜。
这些胜负有什么规律呢?
我们可以将每堆的数转换成二进制,然后看每一位上所有堆里的1的个数总和:
必胜情况:
(n)(1,2)(1,3)(2,3)(1,1,1)(1,1,2)(1,2,2)
必败情况:
(1,1)(2,2)(3,3)(1,2,3)
化为二进制:
必胜情况:
(n)<只有1堆>:
……(反正每位只要有1肯定只有1个)
(1,2):
1,10
列成竖式:
01
10
个位上只有1个1,“十位”(因为是二进制所以叫十位不妥,这里为了方便说明暂且使用,下同)上也只有1个1。
(1,3):
1,11
列成竖式:
01
11
个位上有2个1(1的1个,3的1个),十位上有1个1。
(2,3):
10,11
个位上有1个1,十位上有2个1。
(1,1,1):
1,1,1
个位上有3个1。
(1,1,2):
1,1,10
个位上有2个1,十位上有1个1。
(1,1,3):
1,1,11
个位上有3个1,十位上有1个1。
(1,2,2):
1,10,10
个位上有1个1,十位上有2个1。
必败情况:
(1,1):
1,1
个位上有2个1。
(2,2):
10,10
十位上有2个1。
(3,3):
11,11
个位上有2个1,十位上也有2个1。
(1,2,3):
1,10,11
个位上有2个1,十位上也有2个1。
下面分析一下这些情况。
先看必败情形。
容易发现,所有的必败情形,都是所有的数位上都有偶数个1。
下看必胜情形。
我们发现,出现了两种情况:
1.只有1位上有奇数个1,如(1,3)(2,3)(1,1,1)(1,1,2)(1,2,2)。
而先取者取走该位上的1,所有的位上就都变成了偶数个1,而这时后取者变成了先取者。
2.有若干位上都是奇数个1,如(n)(1,2)(1,1,3)。
先取者取(不一定取走哪位)后,所有的位上也都变成了偶数个1。
后取者变成了先取者。
以上两种情况,都是将后取者逼至必败情况从而取胜。
由以上分析我们可以得到结论:
将所有的堆的石子数化为二进制后,如果所有数位上的1的个数都是偶数,那么先取者必败;如果有些位上的1的个数是奇数,先取者能够将所有数位上的1的个数都变为偶数的话,那么先取者必胜。
好,下面来分析我们的题目。
3,5,7,19,50化为二进制是:
000011
000101
000111
010011
110010
可见,只有最高位的1是奇数个,其他位上都是偶数个。
所以只需要将最高位的1取走即可必胜。
二进制的100000就是10进制的32,所以要将50个石子的那堆取32个,取掉就变成偶数个数目。
于是先取者必胜。
以后无论对方怎么取,始终保证每一位上的1的个数是偶数即可(一种简单的方法是,他在一堆中取几个,你在另一堆中也取几个就可以)。