2017-12-07 15 views
-1

정렬되지 않은 배열이 있습니다. 이 배열의 대부분의 숫자는 연속적이며 (1, 2, 3, 4, 5, ...) 때로는 나머지 숫자보다 높은 숫자가 있습니다.C# : 숫자의 배열을 반복하고 하나의 배열에 연속 숫자를 넣고 다른 배열의 다른 숫자는 모두

int highestNumber = int.MinValue; 
int secondHighestNumber = int.MinValue; 

int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 1207, 7, 8, 9, 1803, 10, 11, , 9000, 9001 }; 
int counter = 0; 

foreach (int number in arr) { 
    if (number > highestNumber) { 
     secondHighestNumber = highestNumber; 
     highestNumber = number; 
    } 
    else if (number > secondHighestNumber) secondHighestNumber = number; 
} 

코드를 실행하면 9001이 가장 높은 숫자이고 9000이 두 번째로 높다고 나옵니다. 하지만 모든 숫자가 1에서 11까지 배열이되도록 변경하고자합니다. 모든 연속 숫자 은 하나의 차이가이고 더 큰 숫자는 두 번째 배열 인 1207, 1803, 9000 및 9001.
9000 및 9001은 첫 번째 배열에 있으면 안됩니다.이 숫자와 나머지 사이의 차이가 너무 높기 때문입니다. 그래서 최종 결과는 다음과 같아야합니다

int[] arr1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; 
int[] arr2 = new int[] { 1207, 1803, 9000, 9001 }; 

이의 목적이 무엇인지에 대한 몇 가지 배경 정보 :
효율적인 기사를 작성하고 각 기사가 무엇을 가장 높은 문서 번호를 찾고에 의해 생성되는 문서 번호가 있습니다 지금까지 "기사"테이블에 있습니다 (예 : 20), 새 기사의 번호는 해당 숫자 + 1 (예 : 21)입니다. 따라서 숫자 당 증분. 그러나 고객은 때때로 기사를 추가하고 기사에 원하는 기사 번호를 입력 할 수 있기를 원하므로 마지막으로 작성한 기사에 기사 번호로 7000을 입력했다고 가정 해 봅시다. 그 다음에 그는 그 다음에 다른 기사를 작성하면 계속 증가하는 숫자 목록을 가지고 계속해야합니다. 따라서 고객이 다음 기사의 가치를 다시 변경하지 않는 한 다음 새 기사의 기사 수는 22 개 (7001 제외) 여야합니다.

나는 지금 당분간 이것을 알아 내려고 노력하면서 어떤 도움을 주시면 감사하겠습니다.

+1

정렬 한 다음 처음부터 시작하십시오. –

+0

@ ThomasWeller 그러나 코드는 9001을 가장 높게, 9000을 두 번째로 높게 반환합니다. – Magali

+3

'arr.Select (i => i + 1). 예외 (arr) .Min()' – PetSerAl

답변

0
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 1207, 7, 8, 9, 1803, 10, 11, 9000, 9001 }; 

// Sort the array 
Array.Sort(arr); 

// Start at the beginning and check if the index matches the actual number. 
// Computer begins at 0, so fix that 
for (int index=0;index<arr.Length; index++) 
{ 
    if (arr[index] != index+1) 
    { 
     Console.WriteLine("Next ID is " +(index+1)); 
     break; 
    } 
} 
+0

접근 방법을 재 작업 할 수 있습니다. 각 상품에 대해 두 개의 번호 (시스템 생성 번호 : 1, 2, 3, ...)와 고객 지정 번호 (있는 경우)를 저장하십시오. 각 상황에 맞는 번호를 사용하십시오. – rossum

1

다음 번 번호를 사용하고 싶거나 2 세트를 원한다면 잘 모르겠습니다. 두 세트를 원하면 다음과 같이하십시오.

int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 1207, 7, 8, 9, 1803, 10, 11, , 9000, 9001 }; 
int counter = 0; 
List<int> l1 = new List<int>(); 
List<int> l2 = new List<int>(); 

foreach (int number in arr) { 
    if(l1.Count==0 || l1[l1.Count-1] == (number -1)) 
     l1.Add(number); 
    else 
     l2.Add(number); 
}