Удаление более мощной строки - 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))));
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д