Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:谁能讲讲第一个测试结果怎么得到的?In Reply To:谁能讲讲第一个测试结果怎么得到的? Posted by:yyaadet at 2005-09-29 21:00:43 高手们结果是: //记*为n=k-1时的表达式,则n=k时,表达式为 //((An-1|Bn-1)|(*|((An-1|An-1)|(Bn-1|Bn-1)))) //则递归函数的结构为:先输出*左边的部分,然后输出*,再输出*右边的部分。 //边界条件为n=1,此时表达式为((A0|B0)|(A0|B0))。 //虽然不知道怎么得来的,但测试数据是可以分析的。 //题目要求的是给你的这个 n 位二进制数,判断是否任意的两个数的和是否进位了。 //这样分析:判断是否进位,先看最高位是哪两个数,如果最高位都是 1 ,必然进位。 //就有 1|1 = 0,0|x = 1。所以就有(An-1|Bn-1)|*。 //这个 * 是求低位是否进位。同样有这样的递归,但最后一位,也就是A0+B0是否进位就要特别考虑了。 //因为它们没有低位的考虑。于是就有A0+B0的进位用(A0|B0)|(A0|B0)来判断。 //那是不是就是(An-1|Bn-1)|((An-2|Bn-2)...|((A0|B0)|(A0|B0)))呢?不是,刚才只能确定,当 An-1 和 Bn-1 都为 //1 时才具备这样的表达式。但如果 An-1,Bn-1 不全为 1 。就要另作考虑了。这样,考虑时就不必考虑都是 1 的 //情况。也就是说看这个表达式(An-1|Bn-1)|(*|?)。这里的 * 指低位是否进位。? 指对An-1和Bn-1不全为0时的进一步判断。 //可以看到,如果低位进位,则 *=1 否则 *=0。现在判断是否进位,只要An-1和Bn-1二者之一是否为 1 即可。 //注意到,An-1和Bn-1不全为 0 时,有 An-1|Bn-1=1 。也就是说,如果后面的表达式为 0 时才进位,否则不进位。 //那么,现在已经知道低位进位 *=1,否则*=0 。要做的是,使An-1和Bn-1两者之一是 1 时与 * 运算,有 //1|?=0,0|?=1。并且当两者都不是 1 时,有1|?=1,0|?=1。由于0|x=1,所以只需考虑 1|? 的情况。 //于是有当两者之一是 1 时,?=0,并且两者均为 0 时,?=1。于是有?=(An-1|An-1)|(Bn-1|Bn-1) //这样,整个式子就是:((An-1|Bn-1)|(*|((An-1|An-1)|(Bn-1|Bn-1))))。 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator