如何打印下面给出的数字? [英] how to print the number like given below?
本文介绍了如何打印下面给出的数字?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
例如,我给出的输入类似于1,2,3,4,5,6,7,9,10,11,13,15,16,17,18。这个输出应该是1-7,9-11,13,15-18。请帮我拿出这个输出。
问候,
David
For example, i have given input like a 1,2,3,4,5,6,7,9,10,11,13,15,16,17,18. for this output should be 1-7,9-11,13,15-18. please help me out to get this output.
Regards,
David
推荐答案
这是一个天真的解决方案,但它可能适合你;
This is a naive solution but it might work for you;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Numbers {
public struct Region {
public int From;
public int To;
public Region(int from, int to) {
From = from;
To = to;
}
public override string ToString() {
if (From != To)
return String.Format("{0}-{1}", From, To);
else
return String.Format("{0}", From);
}
}
class Program {
static IEnumerable<Region> FindRegions(IEnumerable<int> series) {
int? start = null;
int last = 0;
foreach (int n in series.OrderBy(v => v)) {
if (!start.HasValue) {
start = n;
}
else {
if (n - last > 1) {
System.Diagnostics.Debug.WriteLine(n);
yield return new Region(start.Value, last);
start = n;
}
}
last = n;
}
yield return new Region(start.Value, last);
}
static void Main(string[] args) {
string input = "1,2,3,4,5,6,7,9,10,11,13,15,16,17,18";
var numbers = input.Split(',').Select(s => Convert.ToInt32(s));
var regions = FindRegions(numbers);
string output = String.Join(",", regions);
Console.WriteLine(output);
}
}
}
希望这会有所帮助,
Fredrik
Hope this helps,
Fredrik
一种类似但更直接的方法。
A similar, but more straight forward method.
string input = "1,2,3,4,5,6,7,9,10,11,13,15,16,17,18";
var numbers = input.Split(',').Select(s => int.Parse(s)).OrderBy(n => n);
int start = int.MaxValue;
int current = 0;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < numbers.Count(); i++)
{
current = numbers.ElementAt(i);
if (current < start)
start = current;
if ((i + 1 == numbers.Count()) || (numbers.ElementAt(i + 1) > current + 1))
{
if (start == current)
sb.AppendFormat("{0},", start);
else
sb.AppendFormat("{0}-{1},", start, current);
start = int.MaxValue;
}
}
string output = sb.ToString().TrimEnd(',');
这篇关于如何打印下面给出的数字?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文