问题描述
用c#把一串数字的连续的和不连续的区分开:数字:数量是随机的(最多24个),顺序是从小到大,范围是1-24,有些连续,有些不连续。例:【1,2,3,5,7,8,9,15,18,19,24】结果:1-3;5-5;7-9;15-15;18-19;24-24例:【5,8,9,10,11,13,14,15,16,18,19】结果,5-5,8-11;13-16,18-19
解决方案
解决方案二:
既然“顺序是从小到大”,直接判断就可以了:int[]nums={1,2,3,5,7,8,9,15,18,19,24};stringresult="";for(inti=0;i<nums.Length;i++){if(i==0)result+=nums[i];elseif(nums[i]-nums[i-1]!=1)result+="-"+nums[i-1]+","+nums[i];elseif(i==nums.Length-1)result+="-"+nums[i];}
解决方案三:
int[]a={1,2,3,5,7,8,9,15,18,19,24};intnowValue=a[0];intstartIndex=0;intendIndex=1;for(vari=1;i<=a.Length;i++){intv;if(i<a.Length){v=a[i];}else{v=a[a.Length-1]+2;}if(v!=nowValue+i-startIndex){endIndex=i-1;Console.WriteLine("{0}-{1}",nowValue,nowValue+endIndex-startIndex);nowValue=v;startIndex=i;}}
解决方案四:
可以把一楼代码中的最后一个else中的else删掉。if(i==0)result+=nums[i];elseif(nums[i]-nums[i-1]!=1)result+="-"+nums[i-1]+","+nums[i];if(i==nums.Length-1)result+="-"+nums[i];//删除else
解决方案五:
http://blog.csdn.net/xianfajushi/article/details/44001235
解决方案六:
int[]arr={1,2,3,5,7,8,9,15,18,19,24};varquery=arr.OrderBy(p=>p).Aggregate<int,List<List<int>>>(null,(m,n)=>{if(m==null)returnnewList<List<int>>(){newList<int>(){n}};if(m.Last().Last()!=n-1){m.Add(newList<int>(){n});}else{m.Last().Add(n);}returnm;});//打印结果query.ForEach(p=>Console.WriteLine(p.First()+"-"+p.Last()));
解决方案七:
这种作业只要学过循环语句就应该会啊