问题描述
1,2,3,4,5,6,7,8八个数字满足下列条件:()+()=9()-()=1()+()=7()-()=2这4个数字不能重复?c#怎么求出这4个数字
解决方案
解决方案二:
8个()需填8个数字4个数字是什么意思?
解决方案三:
本帖最后由 bdmh 于 2015-12-10 13:10:21 编辑
解决方案四:
9:10000001、01000010、00100100、000110001:11000000、01100000、00110000、00011000、00001100、00000110、000000117:10000100、01001000、001100002:10100000、01010000、00101000、00010100、00001010、00000101笛卡尔积全组合,判定4个集合的正好能,合出11111111
解决方案五:
引用楼主HQB313的回复:
1,2,3,4,5,6,7,8八个数字满足下列条件:()+()=9()-()=1()+()=7()-()=2这4个数字不能重复?c#怎么求出这4个数字
括号里的8个数字不能重复,不好意思,之前写错了
解决方案六:
引用3楼wanghui0380的回复:
9:10000001、01000010、00100100、000110001:11000000、01100000、00110000、00011000、00001100、00000110、000000117:10000100、01001000、001100002:10100000、01010000、00101000、00010100、00001010、00000101笛卡尔积全组合,判定4个集合的正好能,合出11111111
代码怎么写?
解决方案七:
此题貌似无解吧()+()=9,需要一个奇数()+()=7,需要一个奇数()-()=1,需要一个奇数上面总共就3个奇数了,那么就要有3个偶数配合,此时剩下一个偶数和一个奇数,而()-()=2,这个必须是两个偶数或者两个奇数,根本就没那么多了
解决方案八:
引用6楼bdmh的回复:
此题貌似无解吧()+()=9,需要一个奇数()+()=7,需要一个奇数()-()=1,需要一个奇数上面总共就3个奇数了,那么就要有3个偶数配合,此时剩下一个偶数和一个奇数,而()-()=2,这个必须是两个偶数或者两个奇数,根本就没那么多了
说得在理
解决方案九:
人家要的是在括号中填数,和外面的有什么关系?就算是有关系,他的8个数也都给出了
解决方案十:
引用6楼bdmh的回复:
此题貌似无解吧()+()=9,需要一个奇数()+()=7,需要一个奇数()-()=1,需要一个奇数上面总共就3个奇数了,那么就要有3个偶数配合,此时剩下一个偶数和一个奇数,而()-()=2,这个必须是两个偶数或者两个奇数,根本就没那么多了
不讨论能解不,主要是我想学习下这种循环的C#怎么写代码?
解决方案十一:
洗了一个,你自己看着简化吧classFindObj{publicintstart;publicList<int>list;}List<int>list=newList<int>(newint[]{1,2,3,4,5,6,7,8});Stack<FindObj>stack=newStack<FindObj>();Stack<String>stackResult=newStack<String>();privatevoidFoo(List<int>numbers,intftype,intstart){if(numbers.Count==0)return;if(start>=numbers.Count)return;intn=numbers[start];List<int>newList=newList<int>();newList.AddRange(numbers);newList.RemoveAt(start);boolfind=false;for(inti=start+1;i<numbers.Count;i++){if(ftype==1){if(n+numbers[i]==9){newList.Remove(numbers[i]);stackResult.Push(String.Format("第一个{0}:{1}",n,numbers[i]));find=true;break;}}elseif(ftype==2){if(Math.Abs(n-numbers[i])==1){newList.Remove(numbers[i]);stackResult.Push(String.Format("第二个{0}:{1}",n,numbers[i]));find=true;break;}}elseif(ftype==3){if(n+numbers[i]==7){newList.Remove(numbers[i]);stackResult.Push(String.Format("第三个{0}:{1}",n,numbers[i]));find=true;break;}}else{if(Math.Abs(n-numbers[i])==2){newList.Remove(numbers[i]);stackResult.Push(String.Format("第四个{0}:{1}",n,numbers[i]));find=true;break;}}}if(!find){if(stackResult.Count==0)return;stackResult.Pop();if(stack.Count==0)return;FindObjobj=stack.Pop();Foo(obj.list,ftype-1,obj.start+1);}else{FindObjobj=newFindObj();obj.start=start;obj.list=numbers;stack.Push(obj);Foo(newList,ftype+1,0);}}//使用listBox1.Items.Clear();Foo(list,1,0);if(stackResult.Count==0)listBox1.Items.Add("无解");elselistBox1.Items.AddRange(stackResult.OrderBy(x=>x).ToArray());
解决方案十二:
classProgram{staticvoidMain(string[]args){List<int>lstNum1=newList<int>{1,2,3,4,5,6,7,8};List<CalculateInfo>lstC1=newList<CalculateInfo>()//{//newCalculateInfo(CalculateType.Addition,9),//()+()=9//newCalculateInfo(CalculateType.Subtraction,1),//()-()=1//newCalculateInfo(CalculateType.Addition,7),//()+()=7//newCalculateInfo(CalculateType.Subtraction,2)//()-()=2//};{newCalculateInfo(CalculateType.Addition,9),newCalculateInfo(CalculateType.Subtraction,4),newCalculateInfo(CalculateType.Addition,7),newCalculateInfo(CalculateType.Subtraction,2)};List<string>sucMsgs1;if(Calculate(lstNum1,lstC1,outsucMsgs1)){Console.WriteLine("解出{0}种组合:",sucMsgs1.Count);foreach(stringsucMsginsucMsgs1)Console.WriteLine(sucMsg);}elseConsole.WriteLine("无解");Console.ReadKey();}staticboolCalculate(List<int>lstRemainderNum,List<CalculateInfo>lstCI,outList<string>sucMsgs,intcaIndex=0){sucMsgs=newList<string>();boolhasResult=false;CalculateInfoci=lstCI[caIndex];for(inti1=0;i1<lstRemainderNum.Count;i1++){intnum1=lstRemainderNum[i1];lstRemainderNum.RemoveAt(i1);for(inti2=0;i2<lstRemainderNum.Count;i2++){intnum2=lstRemainderNum[i2];lstRemainderNum.RemoveAt(i2);if(ci.CanCalculate(num1,num2)){stringsucMsg=string.Format(ci.Formant,num1,num2)+"";if(caIndex==lstCI.Count-1)//当前是最后一次计算{hasResult=true;sucMsgs.Add(sucMsg);}else//不是最后一个计算{List<string>sucMsgs_next;boolnextHasResult=Calculate(lstRemainderNum,lstCI,outsucMsgs_next,caIndex+1);if(nextHasResult){foreach(stringsucMsg_nextinsucMsgs_next)sucMsgs.Add(sucMsg+sucMsg_next);hasResult=true;}}}lstRemainderNum.Insert(i2,num2);}lstRemainderNum.Insert(i1,num1);}returnhasResult;}}classCalculateInfo{privateCalculateType_ct;privateint_result;publicCalculateInfo(CalculateTypect,intresult){_ct=ct;_result=result;}publicboolCanCalculate(intnum1,intnum2){switch(_ct){caseCalculateType.Addition:returnnum1+num2==_result;caseCalculateType.Subtraction:returnnum1-num2==_result;default:thrownewNotImplementedException(_ct.ToString());}}publicstringFormant{get{stringctStr=null;switch(_ct){caseCalculateType.Addition:ctStr="+";break;caseCalculateType.Subtraction:ctStr="-";break;default:thrownewNotImplementedException(_ct.ToString());}returnstring.Format("{{0}}{0}{{1}}={1}",ctStr,_result);}}}enumCalculateType{Addition,Subtraction,}
这里4+3和3+4算作两种组合,因为你给的是填空,所以我判断为两种填法都是可以的。好吧,其实是我懒得再加判断了,可写了我好一会呢