[FZH] 一个C语言题目

microcai microcai at fedoraproject.org
Sat May 14 12:24:40 UTC 2011


于 2011年05月14日 17:08, 宏羽杜 写道:
> 有2N个人去买票,票价是50,N个人手上有50块钱,N个人有100块钱,售票员手上没有零钱.问这2N个人有多少种排队方法.当输入一个N时,输出排列数.N<=20.
> 
> 但是我不理解的是这里的排列数,到底是要输出所有的可能,还是要把每一个可能都输出呢?
> 还有就是,100的N个人和50的N个人之间是不是有差别的(即,是不是需要组合.)
> 

为何很多人宣称学不好数学就当不好程序员呢?
因为他们狭隘的认为程序==算法

而他们又狭隘的认为算法==数学。
只因为他们遇到的算法题目都是数学题。

实际上呢?
实际上上,数学题(如果非要用计算机去解决的话)通常都是由专业的数学软件去解
决的 ....

而软件工程,则事实上不需要多少数学知识,他更多的是需要广阔的知识面,对各
种实际软件硬件的深刻理解。

拿数学题目去当习题练习编程,本身就是错误的。
好了,批判完这个,我开始解决你手头的数学题好了。


其实方法很简单,就是保证售票员手里总是有余钱就可以了。
只要手里拿 50票子的人总是在拿100票子的人之前付款,这样的排队方式就是可以的。


首先我们把这类人排两队。 那么每一个队伍的排队方法是  A(N)(N) 种。

那么,典型的就是 N 个 50票子的人和 N 个 100 票子的人交错排队,保证拿 50
的在前就可以了

那么可能的情况就是   A(N)(N) * A(N)(N) .  分别是 两队 N 个人员的完全排列
再对这2个完全排列的进行组合。

但是,这还只是其中的一种情况。

事实上, 这2队人可以任意穿插,只要在穿插的时候,保证 50 票子那队的人先行
排队。

这样算出来排列的可能性就可以用一个公式表达出来了。 诶,好几年没学数学
了,都不知道接下来怎么排了。囧,请知道的人赶紧站出来指点一下。

反正,只要一个公式折腾出来就可以了,程序也就是一个简单的计算过程,
按按计算器就可以了。


= =

我说到,公式出来了,按按计算器就可以了,我是这么说的么? 呵呵。

所以啊,解决数学问题不是程序员的事情,编写好用的计算器软件才是。

国内的教育都在误导程序员去做数学家。

而编写计算器软件,则更多的是艺术~~~~~~ 而不是数学。

so, knuth 说, 计算机科学首先艺术。

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: OpenPGP digital signature
Url : http://lists.fedoraproject.org/pipermail/chinese/attachments/20110514/d520ecd8/attachment.bin 


More information about the Chinese mailing list