Удаление более мощной строки - C#

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

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

Имеется матрица(задана в виде списка). Элементы нули и единицы. Задание такое: если одна строка является подмножеством второй, то удаляется более мощная строка. Например, есть строки: первая 1 0 0 1 1 и вторая 0 0 0 1 1. Здесь мощность определяется индексами элементов, в которых значения равно 1. Т. е. смотрим индексы на которых стоят единицы в строках: первая строка {0, 3, 4}, вторая строка {3, 4}. Удаляется первая строка, т. к. она включает в себя элементы, которые есть во второй строке.
Листинг программы
  1. List<List<int>> matrixA = new List<List<int>>() {
  2. new List<int>() { 1,0,0,1,1},
  3. new List<int>(){ 0,0,0,1,1},
  4. new List<int>(){ 1,0,1,1,0 },
  5. new List<int>(){ 0,1,1,0,1 },
  6. new List<int>(){ 0,1,0,0,1 },
  7. new List<int>(){ 1,0,0,1,0 },
  8. new List<int>(){ 0,0,0,1,1 },
  9. new List<int>(){ 1,1,0,0,0 }};
Подскажите, каким образом это реализовать?

Решение задачи: «Удаление более мощной строки»

textual
Листинг программы
  1.     static class ListExtensions
  2.     {
  3.         public static bool IsSupersetOf(this List<int> left, List<int> right)
  4.         {
  5.             for (int i = 0; i < left.Count; ++i)
  6.                 if (left[i] == 0 && right[i] == 1)
  7.                     return false;
  8.             return true;
  9.         }
  10.     }
  11.  
  12.     public class Program
  13.     {
  14.         public static void Main(string[] args)
  15.         {
  16.             List<List<int>> matrixA = new List<List<int>>() {
  17.  
  18.             new List<int>() { 1,0,0,1,1},
  19.             new List<int>(){ 0,0,0,1,1},
  20.             new List<int>(){ 1,0,1,1,0 },
  21.             new List<int>(){ 0,1,1,0,1 },
  22.             new List<int>(){ 0,1,0,0,1 },
  23.             new List<int>(){ 1,0,0,1,0 },
  24.             new List<int>(){ 0,0,0,1,1 },
  25.             new List<int>(){ 1,1,0,0,0 }};
  26.  
  27.             for (int i = 0; i < matrixA.Count; ++i)
  28.                 for (int j = 0; j < matrixA.Count; ++j)
  29.                     if (i != j && matrixA[i].IsSupersetOf(matrixA[j]))
  30.                     {
  31.                         matrixA.RemoveAt(i--);
  32.                         break;
  33.                     }
  34.  
  35.             Console.WriteLine(string.Join(Environment.NewLine, matrixA.Select(row => string.Join(" ", row))));
  36.         }
  37.     }

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


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

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

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут