问题描述
求一个排列问题,比如:原始数据是1、2。(项目中实际用到的数据是1-10)全排列是:111221(与12重复,所以就不要了)22我要的数据是:111222怎么做?谢谢~~~
解决方案
解决方案二:
你倒是先写个全排列出来啊
解决方案三:
设置一个计数器,统计下元素被调用的次数,这个方案可行不?
解决方案四:
排是可以排,不过1-10的结果会非常大。
解决方案五:
我先写一个示例出来吧:varindex=1;for(varindex01=1;index01<=2;index01++){varindex01X=index01;for(varindex02=1;index02<=2;index02++){varindex02X=index02;for(varindex03=1;index03<=2;index03++){varindex03X=index03;Console.WriteLine(index+@"."+index01X+@"-"+index02X+@"-"+index03X);}}index++;}//结果是:1.1112.1123.121//与2重复(顺序不同,也算重复),舍弃4.1225.211//与2重复(顺序不同,也算重复),舍弃6.212//与4重复(顺序不同,也算重复),舍弃7.221//与4重复(顺序不同,也算重复),舍弃8.222
解决方案六:
varindex=1;for(varindex01=1;index01<=2;index01++){varindex01X=index01;for(varindex02=1;index02<=2;index02++){varindex02X=index02;for(varindex03=1;index03<=2;index03++){varindex03X=index03;if(index01X<=index02X&&index02X<=index03X)Console.WriteLine(index+@"."+index01X+@"-"+index02X+@"-"+index03X);}}index++;}
解决方案七:
textBox1.Clear();inti=1;for(inti1=1;i1<=2;i1++)for(inti2=i1;i2<=2;i2++)for(inti3=i2;i3<=2;i3++){textBox1.Text+=i.ToString()+""+i1.ToString()+""+i2.ToString()+""+i3.ToString()+"rn";i++;}
解决方案八:
排列中,21与12重复,所以就留一个那么这就是组合求组合的算法不下十种,目前认为效率最高的是01移动算法你可以在网上找到各种算法的代码和算法说明关键在于你得理解算法的原理
解决方案九:
可以用递归法,下面是一个泛型的示例,参数list是需要求组合的列表,num是组合的个数,startindex是从第几个数开始组合(一般都是0),outputLIst是输出列表publicstaticclassClass1<T>{privatestaticintm=0;privatestaticList<T>tempList=newList<T>();publicstaticvoidGetResult(List<T>list,intnum,intstartIndex,refList<List<T>>outputList){m++;for(inti=startIndex;i<list.Count;i++){tempList.Add(list[i]);if(m==num){T[]array=newT[num];tempList.CopyTo(array);outputList.Add(array.ToList());}else{GetResult(list,num,i+1,refoutputList);}tempList.Remove(list[i]);}m--;}}
解决方案十:
解决方案十一:
1到10各自数量为n1到n10for(n1=0;n1<=10;n++){for(n2=0;n2<=10-n1;n++){for.....最后n10就是10-n1-n2-...-n9}}具体排列是浮云,只要记每种的数量就行了吧
解决方案十二:
functioncount(){result="";for(i1=0;i1<=10;i1++){for(i2=0;i2<=10-i1;i2++){for(i3=0;i3<=10-i1-i2;i3++){for(i4=0;i4<=10-i1-i2-i3;i4++){for(i5=0;i5<=10-i1-i2-i3-i4;i5++){for(i6=0;i6<=10-i1-i2-i3-i4-i5;i6++){for(i7=0;i7<=10-i1-i2-i3-i4-i5-i6;i7++){for(i8=0;i8<=10-i1-i2-i3-i4-i5-i6-i7;i8++){for(i9=0;i9<=10-i1-i2-i3-i4-i5-i6-i7-i8;i9++){i10=10-i1-i2-i3-i4-i5-i6-i7-i8-i9result+=i1+""+i2+""+i3+""+i4+""+i5+""+i6+""+i7+""+i8+""+i9+""+i10+""}}}}}}}}}$("#abc").html(result);}
用js搞了下,显示到textarea里面,想复制到word里看下字数结果一复制结果吧浏览器卡死了...