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

IT公司面试题收集整理-C有关-算法(打靶10次,和为90,多少种算法,难死人不要命)

2013-03-06 
IT公司面试题收集整理---C相关---算法(打靶10次,和为90,多少种算法,难死人不要命)今天看到一个面试题,大致

IT公司面试题收集整理---C相关---算法(打靶10次,和为90,多少种算法,难死人不要命)

今天看到一个面试题,大致是说,一个人打了10次靶子,共打了90个,靶子成绩分为0-10,然后问有多少种组合方式?

程序里面写的很复杂,我就不贴了,因为这个数值很特殊,全中是100,只打了90,所以10个没中。结果是一样的。

一共打中90与一共不打中10,结果数应该是一样的。那么我们先算算一共打不中的。

第一种情况:一共打不中之和10

我们写成数学公式

x1+x2+x3+x4+x5+x6+x7+x8+x9+x10=10;【x1---x10都是非负整数】x的范围是0<=x<=10【这个10不仅仅是公式的值10,关键这么做,刚好同靶子成绩最大值是一样的,这个是解决问题的关键所在】

那么我们用替换法【替换法是高中常见方法,不会我就没办法了】,设t>=1。t-1=x那么上式写成如下

t1+t2+t3+t4+t5+t6+t7+t8+t9+t10-10=10;

t1+t2+t3+t4+t5+t6+t7+t8+t9+t10=20;

好了,那么我们用隔板法【隔板法不会的自己百度】,对于隔板法,那么t的范围是【1<=t<=11】,那么就是在(20-1)个空格中,插入9个挡板。那么结果就显而易见了。结果是C(19,9)【这个是排列组合的公式,由于不能上下打出来,所以这样写】

还是上个图吧

IT公司面试题收集整理-C有关-算法(打靶10次,和为90,多少种算法,难死人不要命)

结果就是92378

第二中情况:一共打中之和90

第一种方法我们用了替换法和隔板法。

我们现在也用这个方法就会发现问题了,t1+t2+t3+t4+t5+t6+t7+t8+t9+t10=100;

那么结果就是C(99,9),很明显这个数很大,结果不是这个数值。那么我们错在哪里呢?

错在【t】的范围上了,第一种方法,前提是靶子最小值0,最大值是10,替换后,最小值是1,最大是11。

但是第二种方法的【t】的范围就是1-100了,那么结果肯定会不对的。可能会出现如下结果

1,1,1,1,1,1,1,1,1,91那么这个结果,换回x就是0,0,0,0,0,0,0,0,0,90,那么靶子最大值有90环的吗?没有,靶子的范围是【0,1,2,3,4,5,6,7,8,9,10】

所以不能直接这样想,我们需要反着想问题。

好了,感谢你看到结尾,这个问题,是我看面试公司的题目,没有编程序,自己想出来的。希望大家多多指正。

数学功力有多深,程序员就能走多远,王玉超,加油!!!


热点排行