[问题] 新的三个关于算法的题目

楼主: gary771016 (一日测 终身测)   2017-08-20 17:46:21
大家好
我又来了 应该不会有下次了 也就这两家会这样考XD
就当作是笔试分享囉~
这次是 80分钟3题 (看到时有点吓到 上一家是2.5小时3题)
好险题目比较简单~
1. 题目好长其实没有什么XD
A[0]=1
A[1]=4
A[2]=-1
A[3]=3
A[4]=2
一. A[0]=1 所以下一个index是1
二. A[1]=4 所以下一个index是4
三. A[4]=2 所以下一个index是2
四. A[2]=-1 所以停止
答案为4次 (包含一开始的)
没有什么陷阱 只有一开始如果是 A[0]=-1 当然就是1啦~
2. 3/5/7的倍数判断
输入N 印出1~N
如果是3的倍数改为a 同理 5则b 7则c
如果同时是3/5的倍数就改为 ab 同理 3/7则ac ...以此类推
假设N=15
输出:
1
2
a
4
b
a
c
8
a
b
11
a
13
c
ab
新手我本来想说要来用 if/elif/else
但就会想到那张图(三个圈圈交叠) 要考虑多种情况
灵光一闪 用了个有趣的方法 就秒杀了XD
3. 感觉是用递回?
输入一个数字 会有多种组合 但位数要相同
假设是1114 : 1114 /1141 /1411 /4111 答案为4种 (4!/3!)
假设是100 : 100 /010(X) /001(X) 答案为1种 (0在前就不是三位数了)
假设是1234 : 24种 (4!)
假设是1214 : 12种 (4!/2!)
数字范围1~99999 应该可以针对几个位数去做判断和运算吧?
结果我直接用数学排列组合算
一.先算出所有方法数(包含0在前)
二.然后要扣掉0在前的所有方法数
但数字有些位数会重复 花了好长的时间在处理和判断 最后只有做到第一步
记得硬缴出答案(即使sample没过) 还是有一点分数的(拿了50分)
每次对于要排列组合印出所有可能的这类题目都不擅长 是用递回吗?
因为小弟以前大一刚学程式时 教授出的作业难度跳太快了 出了个河内塔 挫折太大了
从此10年不敢碰程式......离题了
总之就这样囉~
作者: schedule6666 (schedule)   2017-08-20 22:41:00
河内塔真的好难喔>_<
作者: indigolemon (蓝色拉拉喵)   2017-08-21 01:31:00
最后一题用 itertools 的permutations,检查首位数后,add到一个set里,再return他的数量就好了。
作者: bibo9901 (function(){})()   2017-08-21 02:01:00
最后一题只要算方法数的话 就是你这样算啊 怎么会错?
作者: Django (Cython)   2017-08-21 14:15:00
其实就都是直接硬作而已 还是没什么算法可言啊...
作者: crow1270 (鸦)   2017-08-21 17:35:00
排列组合的问题而已?照原po那样写没错啊,应该也不用很久吧判断重复的数字然后用有重复物的排列计算、数字是否有零、零开头的排列计算 相减?啊 要印出来 抱歉误会了QQ
作者: eight0 (欸XD)   2017-08-22 09:30:00
作者: alan23273850   2017-08-23 15:37:00
很多教授为了满足自己的权威,作业都故意出很难,打击初学者信心,让人望之却步,万万不可取。还好我从高中就会C了,不然上大学应该也是倒尽胃口

Links booklink

Contact Us: admin [ a t ] ucptt.com