c# codes as below:
using System;
namespace MyApp
{
class Program
{
static void Main()
{
int[] arr1 = { -1, -2, 3, 4, -5, 6, 7, 8, 9, 4,4,4,4,4,4,4,4,4,4,10000,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,5,5,5,5,5,5,7,7,7,7,9,10,12,13};
int[] arr2 = { 0 };
int[] arr3 = new int[0];
GetNum(arr1, 8);
Console.WriteLine();
GetNum(arr2, 8);
Console.WriteLine();
GetNum(arr3, 8);
Console.ReadKey();
}
static void GetNum(int[] arr, int num)
{
if (arr.Length == 0 || arr == null)
return;
int maxNum = arr[0];
int minNum = arr[0];
for (int i = 0; i < arr.Length; i++)
{
if (maxNum < arr[i])
maxNum = arr[i];
if(minNum>arr[i])
minNum=arr[i];
}
bool[] marks = new bool[maxNum-minNum+1];
for (int i = 0; i < arr.Length; i++)
marks[arr[i] - minNum] = true;
for (int i = 0; i < arr.Length; i++)
{
if((num-arr[i]-minNum)>=0&&(num-arr[i]-minNum)<(maxNum-minNum))
{
if (marks[num - arr[i] - minNum] == true)
{
Console.WriteLine("{0} and {1}", arr[i], num - arr[i]);
marks[num - arr[i] - minNum] = false;
marks[arr[i] - minNum] = false;
}
}
}
}
}
}