Разность двух множеств A\B - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Нужно выполнить операцию A\B, т.е. разность множеств по такому алгоритму: 1. Положить i = j = 1 и k = 0. 2. Если в A и B (одновременно) ещё есть непросмотренные элементы, выполнить: a. Если A[i] = B[j], то переходим к следующим элементам множеств A и B, так как равные элементы вычлись и в D ничего добавлять не надо. Выполняем i := i + 1 и j := j + 1 b. Если A[i] < B[j], то, в силу упорядоченности, в множестве B уже точно нет элемента, равного A[i], поэтому ничто не вычитается. Добавляем A[i] в D, то есть k := k + 1 и D[k] := A[i], и переходим к следующему элементу в A, то есть i := i + 1 c. Если A[i] > B[j], то берём следующий элемент из B (так как из A исключить элемент B[i] ввиду того, что в A нет такого элемента), то есть j := j + 1 d. Переходим к пункту 2. Сам алгоритм разности
int a = 0;
            int b = 0;
            int c = 0;
            int[] D = new int[(hashsetA.Count) + (hashsetB.Count)];
            while (a < hashsetA.Count && b < hashsetB.Count)
            {
                if (A[a] == B[b])
                {
                    a++;
                    b++;
                }
                else if (B[b] < A[a])
                {
                    c++;
                    D[c] = A[a];
                    a++;
 
                }
                else if (B[b] > A[a])
                {
                    b++;
                }
            }
            while (a < hashsetA.Count && b > hashsetB.Count)
            {
                c++;
                D[c] = A[a];
                a++;
            }
            Console.WriteLine();
            Console.Write(D[c] + " ");
            Console.ReadLine();
        }
    }
полностью код
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("введите размерность А ");
            int LengthA = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Вводите элементы множества А");
            int[] A = new int[LengthA];
            for (int i = 0; i < LengthA; i++)
            {
                A[i] = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("Исходное множество");
            for (int i = 0; i < LengthA; i++)
            {
                Console.Write(A[i] + " ");
            }
            Console.WriteLine();
            Console.WriteLine("Повторяющиеся элементы удалены");
            var hashsetA = new HashSet<int>();
            foreach (var x in A)
                if (!hashsetA.Contains(x))
                    hashsetA.Add(x);
            Array.Resize(ref A, hashsetA.Count);
            A = hashsetA.ToArray();
            foreach (var x in A)
                Console.Write("{0} ", x);
            for (int i = 0; i < A.Length; i++)
            {
                for (int j = 0; j < A.Length - 1; j++)
                {
                    if (A[j] > A[j + 1])
                    {
                        int z = A[j];
                        A[j] = A[j + 1];
                        A[j + 1] = z;
                    }
                }
            }
            Console.WriteLine();
            Console.WriteLine("Элементы отсортированы по возрастанию");
            for (int i = 0; i < hashsetA.Count; i++)
            {
                Console.Write(A[i] + " ");
            }
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("введите размерность B ");
            int LengthB = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Вводите элементы множества B");
            int[] B = new int[LengthB];
            for (int i = 0; i < LengthB; i++)
            {
                B[i] = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("Исходное множество");
            for (int i = 0; i < LengthB; i++)
            {
                Console.Write(B[i] + " ");
            }
            Console.WriteLine();
            Console.WriteLine("Повторяющиеся элементы удалены");
            var hashsetB = new HashSet<int>();
            foreach (var x in B)
                if (!hashsetB.Contains(x))
                    hashsetB.Add(x);
            Array.Resize(ref B, hashsetB.Count);
            B = hashsetB.ToArray();
            foreach (var x in B)
                Console.Write("{0} ", x);
            for (int i = 0; i < B.Length; i++)
            {
                for (int j = 0; j < B.Length - 1; j++)
                {
                    if (B[j] > B[j + 1])
                    {
                        int z = B[j];
                        B[j] = B[j + 1];
                        B[j + 1] = z;
                    }
                }
            }
            Console.WriteLine();
            Console.WriteLine("Элементы отсортированы по возрастанию");
            for (int i = 0; i < hashsetB.Count; i++)
            {
                Console.Write(B[i] + " ");
            }
            // алгоритм разности
            int a = 0;
            int b = 0;
            int c = 0;
            int[] D = new int[(hashsetA.Count) + (hashsetB.Count)];
            while (a < hashsetA.Count && b < hashsetB.Count)
            {
                if (A[a] == B[b])
                {
                    a++;
                    b++;
                }
                else if (B[b] < A[a])
                {
                    c++;
                    D[c] = A[a];
                    a++;
 
                }
                else if (B[b] > A[a])
                {
                    b++;
                }
            }
            while (a < hashsetA.Count && b > hashsetB.Count)
            {
                c++;
                D[c] = A[a];
                a++;
            }
            Console.WriteLine();
            Console.Write(D[c] + " ");
            Console.ReadLine();
        }
    }
Что не так с алгоритмом? То не все элементы вычитаются,то вообще выдает ошибку

Решение задачи: «Разность двух множеств A\B»

textual
Листинг программы
                if (A[a] == B[b])
                {
                    a++;
                    b++;
                }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы