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

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以内和的计算题目?明天继续



自学时做的 /************加法*********************/ //Math是一个内置类和影片剪辑类 类似的内置核心类 a1.text=String(Math.round(Math.round(Math.random()*100)/2)); //Math类中的取随机数的方法,是指是0~1之间 b1.text=String(Math.round(Math.round(Math.random()*100)/2)); //以上为首次运行时2个加数的值 function js1(s:MouseEvent):void { var a11,b11,c11:uint; a11=uint(a1.text); b11=uint(b1.text); c11=uint(c1.text); //trace (a,b,c); if (c11 == (a11 + b11)) { //以上5行可以简写成if(uint(a1.text)+uint(b1.text)==uint(c1.text)) pd1.text="你真棒!"; } else { pd1.text="再想想?"; c11=uint(c1.text);//再次输入的答案重新赋值给c } } function goon1(s:MouseEvent):void { //以下是两个加数重新赋值,答案为空。 a1.text=String(Math.round(Math.round(Math.random()*100)/2)); b1.text=String(Math.round(Math.round(Math.random()*100)/2)); c1.text=""; pd1.text = ""; } an1.addEventListener(MouseEvent.CLICK,js1); an2.addEventListener(MouseEvent.CLICK,goon1); /*******************减法****************************/ var tmp:uint; var a:uint=Math.round(Math.round(Math.random()*100)/2); var b:uint=Math.round(Math.round(Math.random()*100)/2); if (a<b) { tmp=a; a=b; b=tmp; } //首次运行时如果被减数<减数,交换数值。 a2.text=String(a); b2.text=String(b); //以上为首次运行时2个数的值 function js2(s:MouseEvent):void { var a22,b22,c22:uint; a22=uint(a2.text); b22=uint(b2.text); c22=uint(c2.text); if (c22 == (a22 - b22)) { pd2.text="你真棒!"; } else { pd2.text="再想想?"; c22=uint(c2.text);//再次输入的答案重新赋值给c } } function goon2(s:MouseEvent):void{ //以下是两个加数重新赋值,答案为空。 var tmp:uint; var a:uint=Math.round(Math.round(Math.random()*100)/2); var b:uint=Math.round(Math.round(Math.random()*100)/2); if (a<b) { tmp=a; a=b; b=tmp; } a2.text=String(a); b2.text=String(b); //如果被减数<减数,交换数值。 c2.text=""; pd2.text = ""; } an3.addEventListener(MouseEvent.CLICK,js2); an4.addEventListener(MouseEvent.CLICK,goon2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值