当前位置: 首页 > 编程语言 > C#

如何做X题总结Y难分享

时间:2023-04-10 12:36:20 C#

如何采取X数量的问题,总结Y难度我有一个表Questions->Questions(string),Difficulty(int,1-10)我需要创建一个方法,正如标题所说,采取X个问题,其难度应总结为Y例如:getQuestions(2,10)->Question1(diff:4),Question2(diff:6)getQuestions(3,15)->Question3(diff:5),Question4(diff:5),Question5(diff:5)如何使用LINQ实现这样的功能?这是一种方法,在这里使用递归解决方案的修改版本:找到所有可能的数字组合以达到给定的总和首先,一个公共方法将进行一些快速验证,然后调用递归方法以获得结果://////获取所有组合的numQuestions长度的列表///难度总和为sumDifficulty的问题//////要搜索的问题列表///需要的问题数///难度的数量应该总结为///publicstaticList>GetQuestions(Listquestions,intnumQuestions,intsumDifficulty){if(questions==null)thrownewArgumentNullException("questions");varresults=newList>();//快速参数验证失败if(numQuestionsquestions.Count||sumDifficultynumQuestions*Question.MaxDifficulty){returnresults;}//如果我们只需要单个问题,不需要做任何递归if(numQuestions==1){results.AddRange(questions.Where(q=>q.Difficulty==sumDifficulty).Select(q=>newList{q}));返回结果;}//我们可以删除任何难度高于sumDifficulty减去问题数加一的问题varcandidateQuestions=questions.Where(q=>q.Difficulty(),numQuestions,results);返回结果;}然后执行繁重的递归方法:privatestaticvoidGetSumsRecursively(IReadOnlyListquestions,intsumDifficulty,Listcandidates,intnumQuestions,ICollection>results){intcandidateSum=candidates.Sum(x=>x.Difficulty);如果(candidateSum==sumDifficulty&&candidates.Count==numQuestions){results.Add(candidates);}if(candidateSum>=sumDifficulty)返回;for(inti=0;i();for(intj=i+1;j(candidates){questions[i]};GetSumsRecursively(remaining,sumDifficulty,filteredCandidates,numQuestions,res大招);}}下面是一个用法示例:publicstaticvoidMain(){constintnumberOfQuestions=3;constintsumOfDifficulty=15;//因为我没有你的表,所以我使用对象列表来伪造它varquestions=newList();for(inti=1;ir.Difficulty)),sumOfDifficulty);就这样你就可以做所有的工作,这里是我用来伪造你的表的问题类:以上是C#学习教程:如何取X量的问题,总结了Y难度分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——internalclassQuestion{publicconstintMinDifficulty=1;publicconstintMaxDifficulty=10;私人诠释_难度;publicintDifficulty{get{return_difficulty;}set{if(valueMaxDifficulty)_difficulty=MaxDifficulty;否则_难度=价值;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: