var a = "1,4,5"; var arr = a.split(","); var ln = arr.length; var rt=[];arr.sort(function(a,b){return a-b;}); for(var i=0;i<ln;i++){ for(var j=0;j<ln;j++){ if(i==j) continue; else{ for(var k=0;k<ln;k++){ if(i==k||j==k) continue; else{ rt.push(""+arr[i]+arr[j]+arr[k]); } } } } } alert(rt)
<script> //组合 function C(arr, num){ var r=[]; (function f(t,a,n){ if (n==0) return r.push(t); for (var i=0,l=a.length; i<=l-n; i++){ f(t.concat(a[i]), a.slice(i+1), n-1); } })([],arr,num); return r; }//排列 function P(arr, num){ var r=[]; (function f(t,a,n){ if (n==0) return r.push(t); for (var i=0,l=a.length; i<l; i++){ f(t.concat(a[i]), a.slice(0,i).concat(a.slice(i+1)), n-1); } })([],arr,num); return r; }var r1 = C("0123456789".split(""),3); document.write('组合:<ol><li>'+r1.join('</li><li>')+'</li></ol><br /><br />'); var r2 = P("0123456789".split(""),3); document.write('排列:<ol><li>'+r2.join('</li><li>')+'</li></ol>'); </script>
var nums=[1,2,3]; var results=new Array(); /** *@param nums 数组. *@param indexs 目前构成的数字使用了哪些下标。 *@param str 组合而成的字符串。 */ function toDo(nums,indexs,str) { for(var i=0;i<nums.length;i++) { if(indexs.indexOf(i)==-1) { var str2=str+nums[i];/*这里必须重新申请两人个变量,不然会把之前的str的指针带入下一次循环,结果不准确*/ var indexs2=indexs+i; if(str2.length==nums.length) { results[results.length]=str2; } else { toDo(nums,indexs2,str2); } } } }(function(){toDo(nums,"","");/* 初始时结果字符串为空,使用的下标的集合也为空。 */ alert(results); })();/*执行计算*/
<% '============================================================================ ' 功能:根据输入以半角逗号分隔的数字字符串生成有其中所包含数字的不重复的排列组合代码 ' 参数:str 为数字用半角逗号分隔 '============================================================================ sub sub1(str) arr = split(str, ",") uboundArr = ubound(arr) '如果str为一个数字则直接输出它 if uboundArr = 0 then response.Write(str) exit sub end if
' for i = 0 to ubound(arr) ' for j = 0 to ubound(arr) ' for k = 0 to ubound(arr) ' if arr(i) <> arr(j) and arr(j) <> arr(k) and arr(i) <>arr(k) then ' response.Write(arr(i) & arr(j) & arr(k) & "<br />") ' end if ' next ' next ' next
var arr = a.split(",");
var ln = arr.length;
var rt=[];arr.sort(function(a,b){return a-b;});
for(var i=0;i<ln;i++){
for(var j=0;j<ln;j++){
if(i==j) continue;
else{
for(var k=0;k<ln;k++){
if(i==k||j==k) continue;
else{
rt.push(""+arr[i]+arr[j]+arr[k]);
}
}
}
}
}
alert(rt)
//组合
function C(arr, num){
var r=[];
(function f(t,a,n){
if (n==0) return r.push(t);
for (var i=0,l=a.length; i<=l-n; i++){
f(t.concat(a[i]), a.slice(i+1), n-1);
}
})([],arr,num);
return r;
}//排列
function P(arr, num){
var r=[];
(function f(t,a,n){
if (n==0) return r.push(t);
for (var i=0,l=a.length; i<l; i++){
f(t.concat(a[i]), a.slice(0,i).concat(a.slice(i+1)), n-1);
}
})([],arr,num);
return r;
}var r1 = C("0123456789".split(""),3);
document.write('组合:<ol><li>'+r1.join('</li><li>')+'</li></ol><br /><br />');
var r2 = P("0123456789".split(""),3);
document.write('排列:<ol><li>'+r2.join('</li><li>')+'</li></ol>');
</script>
var nums=[1,2,3];
var results=new Array();
/**
*@param nums 数组.
*@param indexs 目前构成的数字使用了哪些下标。
*@param str 组合而成的字符串。
*/
function toDo(nums,indexs,str)
{
for(var i=0;i<nums.length;i++)
{
if(indexs.indexOf(i)==-1)
{
var str2=str+nums[i];/*这里必须重新申请两人个变量,不然会把之前的str的指针带入下一次循环,结果不准确*/
var indexs2=indexs+i; if(str2.length==nums.length)
{
results[results.length]=str2;
}
else
{
toDo(nums,indexs2,str2);
}
}
}
}(function(){toDo(nums,"","");/* 初始时结果字符串为空,使用的下标的集合也为空。 */
alert(results);
})();/*执行计算*/
'============================================================================
' 功能:根据输入以半角逗号分隔的数字字符串生成有其中所包含数字的不重复的排列组合代码
' 参数:str 为数字用半角逗号分隔
'============================================================================
sub sub1(str)
arr = split(str, ",")
uboundArr = ubound(arr)
'如果str为一个数字则直接输出它
if uboundArr = 0 then
response.Write(str)
exit sub
end if
' for i = 0 to ubound(arr)
' for j = 0 to ubound(arr)
' for k = 0 to ubound(arr)
' if arr(i) <> arr(j) and arr(j) <> arr(k) and arr(i) <>arr(k) then
' response.Write(arr(i) & arr(j) & arr(k) & "<br />")
' end if
' next
' next
' next
'以下代码为动态生成上面注释类似代码]
'变量说明:
' asp_str 用来存放这个动态生成的代码
' asp_if 用来存放循环最深处的if代码
' asp_response 用来存放 asp_if 里的response.write(...)里的arr(i) & arr(j) ...代码
asp_str = "for i0 = 0 to uboundArr" & vbcrlf & "{0}" & vbcrlf & "next" & vbcrlf
asp_if = ""
for i = 1 to uboundArr
asp_str = replace(asp_str, "{0}", "for i" & i & " = 0 to uboundArr" & vbcrlf & "{0}" & vbcrlf & "next" & vbcrlf)
for j = 0 to uboundArr - 1
asp_if = asp_if & " arr(i" & i & ") <> arr(i" & j & ") and"
next
next
asp_response = "arr(i0)"
for i = 1 to uboundArr - 1
asp_if = replace(asp_if, " arr(i" & i & ") <> arr(i" & i & ") and", "")
asp_response = asp_response & "&" & "arr(i" & i & ")"
next
asp_response = asp_response & "&arr(i" & uboundArr & ")"
asp_if = left(asp_if, len(asp_if) - 4)
asp_if = "if" & asp_if & " then" & vbcrlf
asp_if = asp_if & "response.Write(" & asp_response & "&""<br />"")" & vbcrlf
asp_if = asp_if & "end if" & vbcrlf
asp_str = replace(asp_str, "{0}", asp_if)
execute(asp_str)
end subsub1 "1,2,3"
%>