您的位置:首页 > 其它

Flash 与课件制作:简单创建20道加法题目

2015-01-22 01:01 260 查看
var a:Array =[1,2,3,4,5,6,7,8,9,10];
var dic:Array = [];
var total:int = 20;
creatRandomquestions();
//创建的20道 20以内的简单加法
function creatRandomquestions():void
{
var aIndex:int = Math.random()*a.length;
var bIndex:int = Math.random()*a.length;
var numA:int = a[aIndex];
var numB:int = a[bIndex];
if(dic.indexOf(numA+"+"+numB)==-1)
{
dic.push(numA+"+"+numB);
trace(numA+"+"+numB+"=?");
total --;
}
if(total > 0)
{
creatRandomquestions();

}
}


这两道题目,采用一种递归方式设计,但是同事说,递归效率不是最好。而且采用上面的设计,会有漏洞,因为20以内加法的数据 还有 10以上数据。这样一来,上面虽然实现了随机 20道题目出来,不过离需求还有一些差别。于是采用另外一种设计,穷举帅选。

var dic:Array = [];
var total:int = 20;
var maxNum:int = 20;
creatRandomquestions();
//创建的20道 20以内的简单加法
function creatRandomquestions():void
{
//穷举
for (var i:int = 1; i <= maxNum; i++)
{
for (var j:int = i; j <= maxNum; j++)
{
if(i+j > maxNum ) continue;
{
dic.push(i+"+"+j+"=?");
}
}
}

for (i=0;i<20;i++)
{
var r:int = Math.random()*dic.length;
trace(dic.splice(r,1))
}
}


      采用两个循环,将20以内的数据,随机组合起来,然后再帅选起来。这种做法 基本能够实现 20以内的数据组合,且和都是小于20的。采用穷举 再刷选的做法,理解起来也比较容易。也能基本完成目标。同样,出的题目也不会重复。



 但是 你会发现一个小问题。前面的加数 都是个位数字,显得不自然。

 

下面再改造一下,改成不重复的题目,避免出现 3+4 和4+3 这样重复的题目出现了。穷举法可以列举出各种排列组合。从1开始和1-20进行匹配 组合,这样子一开始不对其过滤重复的字眼。从理解上是比较容易。而又可以达到目的。  穷举法 可以解决了我们想要的问题。后来同事 又在讨论,追加了另外一种思路。通过方法接口,刷选20道且不重复的题目,效果还不错,心不由佩服。 因为写的方法虽然可以解决到问题。写得唠叨一点。

var dic:Array = [];
var total:int = 20;
var maxNum:int = 20;
creatRandomquestions();
//创建的20道 20以内的简单加法
function creatRandomquestions():void
{
//穷举
for (var i:int = 1; i <= maxNum; i++)
{
for (var j:int = 1; j <= maxNum; j++)
{
if(i+j > maxNum ) continue;
{
dic.push([i,j]);
}
}
}

var result:Array =[];
while(result.length < maxNum)
{
var index:int = Math.random()*dic.length;
var arr:Array = dic[index];
if(result.indexOf(arr[0]+"+"+arr[1]+"=?")==-1 && result.indexOf(arr[1]+"+"+arr[0]+"=?")==-1)
{
result.push(arr[0]+"+"+arr[1]+"=?");
}
}

trace(result.join("\n"))
}


    后面,再续。再讨论还有无办法刷选这20道不重复且 20以内和的计算题目?明天继续

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: