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

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

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

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

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

textual
Листинг программы
    static class ListExtensions
    {
        public static bool IsSupersetOf(this List<int> left, List<int> right)
        {
            for (int i = 0; i < left.Count; ++i)
                if (left[i] == 0 && right[i] == 1)
                    return false;
            return true;
        }
    }
 
    public class Program
    {
        public static void Main(string[] args)
        {
            List<List<int>> matrixA = new List<List<int>>() {
 
            new List<int>() { 1,0,0,1,1},
            new List<int>(){ 0,0,0,1,1},
            new List<int>(){ 1,0,1,1,0 },
            new List<int>(){ 0,1,1,0,1 },
            new List<int>(){ 0,1,0,0,1 },
            new List<int>(){ 1,0,0,1,0 },
            new List<int>(){ 0,0,0,1,1 },
            new List<int>(){ 1,1,0,0,0 }};
 
            for (int i = 0; i < matrixA.Count; ++i)
                for (int j = 0; j < matrixA.Count; ++j)
                    if (i != j && matrixA[i].IsSupersetOf(matrixA[j]))
                    {
                        matrixA.RemoveAt(i--);
                        break;
                    }
 
            Console.WriteLine(string.Join(Environment.NewLine, matrixA.Select(row => string.Join(" ", row))));
        }
    }

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


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

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

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