找回密码
 加入
搜索
查看: 3106|回复: 5

出道Autoit试题考考你!

  [复制链接]
发表于 2012-4-13 13:35:59 | 显示全部楼层 |阅读模式
本帖最后由 apoorman1986 于 2012-4-13 15:22 编辑

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

有兴趣的朋友,把自己的代码发上来!
想看看每个人的思路和代码有多少不同。

我自己的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-4-13 16:57:23 | 显示全部楼层



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

For $i=0 To $aNewArray[0]-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[0]*$Second&"种分先后的取法")


评分

参与人数 1金钱 +10 收起 理由
apoorman1986 + 10

查看全部评分

发表于 2012-4-13 18:55:08 | 显示全部楼层
数学概率学里有公式的啊,如果不考虑顺序是C(3,7)即7!/(4!*3!),如果考虑顺序是A(3,7)即7*6*5,不用代码……好吧,我承认我扫兴了==!
 楼主| 发表于 2012-4-13 19:00:01 | 显示全部楼层
回复 3# 雪栀

恩,不过公式只能统计多少种方法,而不能一一把每种方法列举出来!
发表于 2012-4-14 08:18:18 | 显示全部楼层
回复 3# 雪栀


    有公式是不错, 要求的是以编程方式将所有办法列出来,而不是套用公式获得总数。 我这个例子其实就是排列组合的方式取的。
发表于 2013-6-19 20:32:15 | 显示全部楼层
嘿嘿,正找这样的排列组合写法
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-25 17:49 , Processed in 0.078594 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表