首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

两个面试题,看看你能否在一小时作出来,该怎么解决

2012-02-29 
两个面试题,看看你能否在一小时作出来1.输入一个整数值作为结果,然后输入一序列得数,相对位置固定,通过+-×

两个面试题,看看你能否在一小时作出来
1.   输入一个整数值作为结果,然后输入一序列得数,相对位置固定,通过+   -   ×   ÷
()   运算得到所输入得结果值。(注意乘除优先级高于加减)
例如:
input:   12
              10   1   1   0
output:   10   +   1   +   1   -   0
                10   +   1   +   1   +   0
输出所有的可能情况。

2.   求   (2^100)   mod   5
      要求时间复杂度最小。

[解决办法]
(2)余数定理中这样说:
(这是肯定的)若c=a mod b (a> b) 则c大于等于0 ,小于等于b-1。
先分析题 余数只有 1 2 4 3 从2^0次开始循环以这4个数为周期对任意的2^n
当n/4==0,1,2,3时2^n mod 5分别为 1 2 4 3。
因为100/4=0 故余数为 1
综上分析,算法的时间复杂度为O(1).
(1)设a,b,c,d是输入的4个操作数,因为4个操作数相对位置固定,故只须插入符号即可。 下面的还没想清楚。

[解决办法]
第二题好做
2 4 8 32 64 ....
可以发现他们的余数分别是 2 4 3 1 2 4 3 1 ....
这个如何证明呢?
-----------------------
2^0 mod 5 余 1
如 2^X mod 5 余 1
则2^(X+1)mod 5 余 2
证明:
设 2^X = 5Y + 1
2^(X+1) = (5Y + 1) * 2 = 10Y + 2
(10Y + 2) mod 5 余 2



[解决办法]
第一题好象不是要求分析表达式,输入的四个数也不让再重新组合,没有说限制括号使用次数!
我的理解是尝试对四个数进行四则混合运算,对于满足要求的运算组合直接输出对应表达式。
对于最终表达式有一个数字序列相对固定的限制,也就是只能在相邻数字之间运算。

我是这样考虑的,先穷举数字组合(包括中间变量),再在前一步的基础上穷举运算组合。
设有a,b,c,d四个数字,一种数字组合是先算a和b得新数ab,再算c和d得新数cd,最后算ab和cd
之于a和b,c和d,ab和cd之间怎么运算,就得穷举所有12种运算方式!
数字组合方式其实代表了运算顺序,最后用添加括号的方式表达出来,应该不是很难。

热点排行