题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
思路:对于这个问题,大家通过简单的推理会很快找到答案,但是如何用程序来解答呢?那么首先我们需要将这个题转变为一个数学题,然后再用程序排列成各种组合,然后排除掉不合要求的结果,那剩下的就是合理的结果了。
具体方案如下:我们先假设a、b、c的对手分别为i 、j、k ,将x,y,z分别用数字1、2、3代替,这样就更接近数学的方程问题了。接下来进行各种可能的组合(i、j、k 都可以等于1、2、3),每当得到一组组合结果,进行判断,如果结果满足下列条件之一,那么这组结果都是不符合的,否则就是正确的。
1、i=j 或 i=k 或 j=k(一个选手不能重复比赛)
2、i=1 (a说他不和x比)
3、k=1 或 k=3 (c说他不和x,z比)
scratch编写程序:
定义三个变量i 、j、k(假设a、b、c的对手分别为i 、j、k);新建列表,存入对手x,y,z,如下图(将x,y,z分别用数字1、2、3代替),1、2、3分别对应x、y、z。
完整的程序如图:点击下载源码
这个程序这么写应该是最容易理解的,但是这并不是最优的,比如i=j(a和b的对手是同一个人)的时候,再去跟k进行组合就是没有任何意义的,这样就可以排除一些无意义的操作,提高计算效率。如果你已经理解了这个题的程序思路,请你多加思考,进行优化改进吧。
本站原创内容,禁止转载。
本站内容未经许可,禁止任何网站及个人进行转载。