45、有一次数学比赛,共有 A,B 和 C 三道题目。所有人都至少解答出一道题目,总共有
25 人。在没有答出 A 的人中,答出 B 的人数是答出 C 的人数的两倍;单单答出 A 的人,
比其他答出 A 的人总数多 1;在所有只有答出一道题目的人当中,答出 B 和 C 的人数刚好
是一半。求只答出 B 的人数。
46、从尾到头输出链表
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
分析:这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题
中。
解答:
设只答对A的人数为A,只答对AB的人数为AB,只答对AC的人数为AC,全部答对的人数为ABC,
只答对B的人数为B,只答对C的人数为C。由题意可列出四个等式:
(1)A+B+C+AB+AC+BC+ABC=25
(2)B+BC=2*(BC+C)
(3)A=AB+AC+ABC+1
(4)A=B+C
化简:
==>
(2)==> BC=B-2C
(1)==> A+ B+C +AB+AC+ABC+ BC=25
==> A+ A +A-1 + B-2C=25
==> 3B+3C-1+ B-2C=25
==> 4B+C=26
把第一个等式全都改为用B和C表示的等式,然后合并消除等等很简单的就得到了最终的等式:
4B+C=26
B=0 C=26 ==> A=26 ==>1不满足
B=1 C=22 ==> A=23 ==>1不满足
B=2 C=18 ==> A=20 ==>1不满足
B=3 C=14 ==> A=17 ==>1不满足
B=4 C=10 ==> A=14 ==>1不满足
B=5 C=6 ==> A=11 ==>1满足 BC=B-2C<0? 不满足
B=6 C=2 ==> A=8 ==>1满足 BC=B-2C=2
所以A+ AB+AC+ABC+1 -1 +B+C+BC=8 +8 -1+8+2=25满足
A=8 B=6 C=2
46、从尾到头输出链表
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
分析:这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题
中。
同58 已实现:http://blog.csdn.net/u012605629/article/details/39967245