Дан массив целых чисел, размера N: int[] m = new int[N], который заполнен числами от 1 до N в произвольном порядке. Из массива убрали два числа. Как за один проход по массиву определить, какие именно числа убрали?
Уважаемые учащиеся ниже Вы сможете увидеть ответ, перед тем, как ответить, пожалуйста, постарайтесь написать для себя ответ на черновике, и только потом сравните наш ответ с Вашим:
Верно ли наше решение?
Ответ:
class Program
{
public static int[] def( int[] arr, int N )
{
int
arrSum = 0, arrP = 1,
TotalSumm = (N + 1) * N / 2,
TotalP=1;
for (int i = 1; i <= N; i++)
TotalP *= i;
for (int i = 0; i < arr.Length; i++)
{
arrSum += arr[i];
arrP *= arr[i]==0? 1:arr[i];
}
int A_plus_B = TotalSumm - arrSum;
int A_na_B = TotalP / arrP;
int A =(int) (A_plus_B + Math.Sqrt( A_plus_B*A_plus_B - 4*A_na_B + 0.0 ) )/2;
int B = A_plus_B - A;
int[] ret = { A, B };
return ret;
}
static void Main(string[] args)
{
int[] test = { 1,2,3,4,5,6,7,0,0,10 };
int [] result = def(test,10);
Console.Write(result[0] + " is A, " + result[1] + " is B");
Console.ReadKey();
}
}
Дан массив целых чисел, размера N: int[] m = new int[N], который заполнен числами от 1 до N в произвольном порядке. Из массива убрали два числа. Как за один проход по массиву определить, какие именно числа убрали?
Уважаемые учащиеся ниже Вы сможете увидеть ответ, перед тем, как ответить, пожалуйста, постарайтесь написать для себя ответ на черновике, и только потом сравните наш ответ с Вашим:
Верно ли наше решение?
Ответ:
class Program
{
public static int[] def( int[] arr, int N )
{
int
arrSum = 0, arrP = 1,
TotalSumm = (N + 1) * N / 2,
TotalP=1;
for (int i = 1; i <= N; i++)
TotalP *= i;
for (int i = 0; i < arr.Length; i++)
{
arrSum += arr[i];
arrP *= arr[i]==0? 1:arr[i];
}
int A_plus_B = TotalSumm - arrSum;
int A_na_B = TotalP / arrP;
int A =(int) (A_plus_B + Math.Sqrt( A_plus_B*A_plus_B - 4*A_na_B + 0.0 ) )/2;
int B = A_plus_B - A;
int[] ret = { A, B };
return ret;
}
static void Main(string[] args)
{
int[] test = { 1,2,3,4,5,6,7,0,0,10 };
int [] result = def(test,10);
Console.Write(result[0] + " is A, " + result[1] + " is B");
Console.ReadKey();
}
}