2016-03-30 17 views
1

Belirli bir sırada hedef aralıkla eşleşen/örtüşen tüm bitişik aralıkları bulmak istiyorum. Örneğin aralık göz önüne alındığındaBelirli bir sırada belirli bir aralıkla eşleşen/örtüşen tüm farklı bitişik aralıkları bulma

5-12

Kaynak aralıkları

1-7

1-13

4-8

4-12

5 olmasıdır -7

5-8

7-12

8-12

5-12

5-13 Yani sonuç

aşağıdaki önem olmalıdır
1. 5-12 (Exact match) 
2. 5-7,7-12 (Two Adjacent ranges match)[Ranges Start And End Exact Match] 
2. 5-8,8-12 (Two Adjacent ranges match)[Ranges Start And End Exact Match] 
3. 5-13 (Single Covering range)[Range Start Exact Match] 
3. 4-12 (Single Covering range)[Range End Exact Match] 
3. 4-8,8-12 (Two Adjacent ranges covering)[Range End Exact Match] 
3. 1-7,7-12 (Two adjacent ranges covering)[Range End Exact Match] 
4. 1-13 (Single Covering range)[No Ranges Start And End Exact Match] 

Her türlü yardım çok değerli olacaktır.

+0

Eğer meşru .NET 2.0 kullanıyorsunuz olsa başkalarını formüle ya da sadece bir etiket Seçtiğin bu? Cevaplar, –

+0

'a göre değişebilir. Ayrıca, örneğin örneğinize bağlı olarak aradığınız mantığı anlamakta çok zorlanıyorum ve eğer bazı kodları gönderebiliyorsanız, bunu denediniz faydalı olurdu –

+0

.NET 2.0 kullanıyorum – lidnuq

cevap

0

birinci alan

class Range{ 
    public int start; 
    public int end; 
    public Range(int start, int end){ 
     this.start=start; 
     this.end=end; 
    } 
    public string toString(){ 
     return start+"-"+end; 
    } 
} 

gibi oluşturulduktan sonra, bir yerde, bu yöntem oluşturmak için bir sınıf oluşturmak.

public static void classifyRanges(Range sourceRange, Range[]ranges){ 
    foreach(Range range in ranges){ 
     if(range.start==sourceRange.start && range.end==range.end){ 
     Console.WriteLine("1."+range.toString()+" (Exact Match)"; 
     } 
    } 
    foreach(Range range in ranges){ 
     if(range.start!=sourceRange.start && range.end!=range.end){ 
     Console.WriteLine("4."+range.toString()+" (No Match)"; 
     } 
    } 
} 

Hala