apoorman1986 发表于 2012-4-13 13:35:59

出道Autoit试题考考你!

本帖最后由 apoorman1986 于 2012-4-13 15:22 编辑

有一个箱子,里面放有红,橙,黄,绿,青,蓝,紫7种球,从箱子里取三个球,有多少种取法并写出每种取法分别是?

有兴趣的朋友,把自己的代码发上来!{:face (301):}
想看看每个人的思路和代码有多少不同。{:face (303):}

我自己的

lanfengc 发表于 2012-4-13 16:57:23




#include <Array.au3>
Dim $array=['红','橙','黄','绿','青','蓝','紫'];定义球总数目
Dim $NumToTake=3;定义要取出几个
$aNewArray = _ArrayCombinations($array, $NumToTake ,',');按组合方式取球
_ArrayDisplay($aNewArray, "总共有"&$aNewArray&"种不分先后的办法");显示取球结果
;获取数组第二维的大小, 取出球数的阶乘
Dim $Second=1
For $i=1 To $NumToTake
        $Second*=$i
Next
Dim $Result[$aNewArray][$Second];按照算出来的数字定义一个而为数组。

For $i=0 To $aNewArray-1;外循环, 循环每个取球组合
        Local $temp=0;定义临时变量
        $temp=StringSplit($aNewArray[$i+1],',');按,拆分
        _ArrayDelete($temp,0);删除顶部的 数组元素个数
        $temp=_ArrayPermute($temp,',') ;按排列重排数组
        _ArrayDelete($temp,0);删除顶部的总数
        If IsArray($temp) Then;将排列好的数组赋值到结果数组里。
                For $j=0 To 5
                        $Result[$i][$j]=$temp[$j]
                Next
        EndIf
Next
_ArrayDisplay($Result,'总共有'&$aNewArray*$Second&"种分先后的取法")


雪栀 发表于 2012-4-13 18:55:08

数学概率学里有公式的啊,如果不考虑顺序是C(3,7)即7!/(4!*3!),如果考虑顺序是A(3,7)即7*6*5,不用代码……好吧,我承认我扫兴了==!

apoorman1986 发表于 2012-4-13 19:00:01

回复 3# 雪栀

恩,不过公式只能统计多少种方法,而不能一一把每种方法列举出来!

lanfengc 发表于 2012-4-14 08:18:18

回复 3# 雪栀


    有公式是不错, 要求的是以编程方式将所有办法列出来,而不是套用公式获得总数。 我这个例子其实就是排列组合的方式取的。

oceanwind 发表于 2013-6-19 20:32:15

嘿嘿,正找这样的排列组合写法{:face (316):}
页: [1]
查看完整版本: 出道Autoit试题考考你!