问题描述
1至13个数,从中取五个数,要求这五个数中不能存在重复的数.每相邻的十个五个数为一组,共取30组(也就是300个五个数)。而且每五个数和其它的五个数不能完全重复。一组中不同的五个数相比较不能存在3个相同的数字。
解决方案
解决方案二:
帮你顶了。
解决方案三:
引用楼主aa381286161的回复:
1至13个数,从中取五个数,要求这五个数中不能存在重复的数.每相邻的十个五个数为一组,共取30组(也就是300个五个数)。而且每五个数和其它的五个数不能完全重复。一组中不同的五个数相比较不能存在3个相同的数字。
里面的“.每相邻的十个五个数为一组”是什么意思
解决方案四:
题目读起有点纠结!麻烦楼主写清楚点!
解决方案五:
该回复于2010-11-10 15:20:45被版主删除
解决方案六:
好吧,我承认我看不懂题目--!纠结
解决方案七:
该回复于2010-11-10 15:21:18被版主删除
解决方案八:
看来是因为看不懂题目啊
解决方案九:
结贴率00000
解决方案十:
哈哈菜鸟飘过无权发言..
解决方案十一:
上帝读不懂的题目
解决方案十二:
一组中不同的五个数相比较不能存在3个相同的数字。只是3个?4个行不?
解决方案十三:
该回复于2010-12-02 15:07:14被版主删除
解决方案十四:
写了个不知道满不满足楼主的题目importjava.util.Vector;publicclassFindFives{privateVector<String>org=null;privateVector<Five>all=null;privateVector<Ten>tens=null;publicFindFives(){tens=newVector<Ten>(0);org=newVector<String>(0);for(inti=1;i<14;i++){org.add(""+i);}all=newVector<Five>(0);createFives();for(intj=0;j<30;j++){Tenten=newTen();for(inti=0;i<10;i++){for(Fivefive:all){if(ten.addToTen(five)){break;}}}tens.add(ten);System.out.println("第"+(j+1)+"组:");for(Fivefive:ten.fives){System.out.println(five.getUID());}}}privatevoidcreateFives(){Fivefive;for(inti1=1;i1<10;i1++){for(inti2=i1+1;i2<11;i2++){for(inti3=i2+1;i3<12;i3++){for(inti4=i3+1;i4<13;i4++){for(inti5=i4+1;i5<14;i5++){five=newFive(""+i1,""+i2,""+i3,""+i4,""+i5);all.add(five);}}}}}}publicstaticfinalvoidmain(Stringarg[]){FindFivesxxx=newFindFives();}classTen{privateVector<Five>fives=null;publicTen(){fives=newVector<Five>(0);}publicbooleanaddToTen(Fivefive){for(Fivef:fives){intsame=0;for(Stringnum:f.getNums()){if(five.getNums().contains(num)){same++;if(same>=3){returnfalse;}}}}fives.add(five);all.remove(five);returntrue;}}classFive{privateVector<String>nums=null;privateStringUID=null;publicFive(){nums=newVector<String>(0);}publicFive(Stringarg1,Stringarg2,Stringarg3,Stringarg4,Stringarg5){nums=newVector<String>(0);nums.add(arg1);nums.add(arg2);nums.add(arg3);nums.add(arg4);nums.add(arg5);}publicVector<String>getNums(){returnnums;}publicStringgetUID(){if(UID==null&&nums.size()==5){UID="";for(Stringnum:nums){UID+=num+".";}}returnUID;}}}
解决方案十五:
题目描述不清楚
其他方案:
写不出来的可能是天才.
其他方案:
引用15楼michaellufhl的回复:
写不出来的可能是天才.
我看楼主才是天才!
其他方案:
谁能告诉我这问题有什么意义?
其他方案:
引用16楼bao110908的回复:
引用15楼michaellufhl的回复:写不出来的可能是天才.我看楼主才是天才!
天才只值40分!!
其他方案:
需要天才才能写出的程序是不是应该付出天价才是?!
其他方案:
刷分的吧!!!!
其他方案:
楼主,你绕口令呀
其他方案:
才几天没来居然说我分数是负分了
其他方案:
卡卡卡卡卡卡
其他方案:
我是进来看天才的。。
其他方案:
坐等高手解答
其他方案:
不知是说啥
其他方案:
确实不太明白,与天才无缘!
其他方案:
天才哥,你直接举例子吧
其他方案:
强烈要求提高天才回报!!
其他方案:
呵呵,顶下。。。。。
其他方案:
纯进来打酱油。。
其他方案:
该回复于2010-12-03 13:42:08被版主删除
其他方案:
呵呵,拍个砖,谢谢大虾解题了!!!!!!
其他方案:
/****/packagehoulei.csdn.algorithm;importjava.util.Arrays;importjava.util.Random;/***1至13个数,从中取五个数,要求这五个数中不能存在重复的数.<br/>*每相邻的十个五个数为一组,共取30组(也就是300个五个数)。<br/>*而且每五个数和其它的五个数不能完全重复。<br/>*一组中不同的五个数相比较不能存在3个相同的数字。*<p>*创建时间:2010-11-10下午04:32:56*@authorHouLei*@since1.0*/publicclassDetachNumber{staticclassNumbers{staticfinalintSize=5;staticfinalintMin=1;staticfinalintMax=13;short[]value=null;/***取Size个从Min到Max的不同数字,排序后,放入value数组。*/publicNumbers(){value=newshort[Size];Randomrand=newRandom(System.currentTimeMillis());for(inti=0;i<Size;i++){value[i]=(short)(rand.nextInt(Max-Min+1)+Min);for(intj=0;j<i;j++){if(value[j]==value[i]){i--;break;}}}Arrays.sort(value);}/***当value数组中所有的数字与目标对象相比都相同的时候,返回true。*@seejava.lang.Object#equals(java.lang.Object)*/@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj!=null&&objinstanceofNumbers){Numberso=(Numbers)obj;returnArrays.equals(value,o.value);}returnfalse;}/***@return返回两个对象的value数组中,相同数字的个数。*/publicintrepeatConts(Numbersfn){intcount=0,i=0,j=0;while(i<value.length&&j<fn.value.length){if(value[i]==fn.value[j]){i++;j++;count++;}elseif(value[i]<fn.value[j]){i++;}else{j++;}}returncount;}@OverridepublicStringtoString(){StringBuilderbuff=newStringBuilder("[").append(value[0]);for(inti=1;i<value.length;i++){buff.append(",").append(value[i]);}buff.append("]");returnbuff.toString();}}staticclassNumbersGroup{staticfinalintSize=10;staticfinalintRepeats=3;privateNumbersvalue[]=null;/***取Size个Numbers放入value数组,并保证重复数小于Repeats。*/publicNumbersGroup(){value=newNumbers[Size];for(inti=0;i<Size;i++){value[i]=newNumbers();for(intj=0;j<i;j++){if(value[j].repeatConts(value[i])>=Repeats){i--;break;}}}}@OverridepublicStringtoString(){StringBuilderbuff=newStringBuilder("{").append(value[0]);for(inti=1;i<value.length;i++){buff.append(",").append(value[i]);}buff.append("}");returnbuff.toString();}}/***测试函数。由于使用的是最土的算法,所以,时间复杂度巨大无比,测试时,请耐心等待。谢谢。*/publicstaticvoidmain(String[]args){finalintGroups=30;java.util.ArrayList<NumbersGroup>list=newjava.util.ArrayList<NumbersGroup>(Groups);for(inti=0;i<Groups;i++){list.add(newNumbersGroup());}for(inti=0;i<Groups;i++){System.out.println(list.get(i));}}}
其他方案:
优化算法,可以考虑,二维数组,数字填充。一个group形成一个二维数组,取30个group就OK了。优化的潜力,还是很大的。
其他方案:
打个酱油
其他方案:
太难了,题目拗口!
其他方案:
太纠结了……
其他方案:
太悲伤了我读不懂题目
其他方案:
C语言算法???
其他方案:
首先相鄰的定義是什麼?其次,10個(5個不重複數)最多只能相同兩個。這個條件錯誤,應該是各10個(5個不重複數)中的(5個不重複數)最多重複兩個。因為10個(5個不重複數)若各(5個不重複數)最多能重複兩個數字,那至少要用掉2+3*10個數字才行。所以題目根本就出錯了。難怪要天才才能寫出來。