Поиск повторяющихся элементов - C#
Формулировка задачи:
есть ступенчатый массив, нужно занести из него в одномерный массив только те элементы, что встречаются по всех строках
initArray метод
using System; using System.Collections.Generic; namespace SteppedArray { class Programm { public static void Main(string []args) { int[][] baseArray = generateArray(min: 3, max: 10); printArray(baseArray); sortArray(baseArray); Console.WriteLine("после сортировки"); printArray(baseArray); Console.Write("поиск элемента x:"); var x = int.Parse(Console.ReadLine()); Console.Write("в строке:"); var line = int.Parse(Console.ReadLine()); Console.WriteLine("индекс элемента {0}",binarySearch(baseArray, line, x)); int[] array = new int[baseArray.Length]; for (int element = 0; element < baseArray.Length; element++) Console.Write(" {0}",array[element] = baseArray[element][0]); int[] repeatArray; initArray(baseArray, out repeatArray); } static int[][] generateArray(int min, int max) { Random randomVal = new Random(); // случайное количество строк int linesAmnt = randomVal.Next(min, max); int[][] array = new int[linesAmnt][]; for (int lineNum = 0; lineNum < linesAmnt; lineNum++) { // элементов int elementsAmnt = randomVal.Next(min, max); array[lineNum] = new int[elementsAmnt]; for (int elementNum = 0; elementNum < elementsAmnt; elementNum++) array[lineNum][elementNum] = randomVal.Next(10, 100); } return array; } static void printArray(int[][] inputArray) { for (int lineNum=0; lineNum < inputArray.Length;lineNum++) { for (int elementNum=0;elementNum<inputArray[lineNum].Length;elementNum++) Console.Write(" " + inputArray[lineNum][elementNum]); Console.WriteLine(); } } static void sortArray(int[][] inputArray) { int buffer; for (int lineNum = 0; lineNum < inputArray.Length; lineNum++) for (int elementNum = 0; elementNum < inputArray[lineNum].Length; elementNum++) for (int elementSort = elementNum + 1; elementSort < inputArray[ lineNum].Length; elementSort++) if (inputArray[lineNum][elementNum]> inputArray[lineNum][elementSort]) {// заменить на другой поиск buffer = inputArray[lineNum][elementNum]; inputArray[lineNum][elementNum] = inputArray[lineNum][elementSort]; inputArray[lineNum][elementSort] = buffer; } } static int binarySearch(int[][] inputArray, int line, int x) { //if ((x < inputArray[line][0]) || (x > inputArray[line].Length)) // return -1; var left = 0; var right = inputArray[line].Length; while (((right - left) / 2) > 0) { var middle = left + (right - left) / 2; if (inputArray[line][middle] < x) left = middle + 1; else right = middle; } return inputArray[line][left] >= x ? left : right; } static void initArray(int [][]inputArray, out int []repeatArray) { var list = new List<int>(); bool logic = true; int check; for (int lineNum = 0; lineNum < inputArray.Length; lineNum++) for (int elementNum = 0; elementNum < inputArray[lineNum].Length; elementNum++) { check = inputArray[lineNum][elementNum]; //? } repeatArray = list.ToArray(); foreach (int elements in repeatArray) Console.Write(" " + elements); } } }
Решение задачи: «Поиск повторяющихся элементов»
textual
Листинг программы
static void initArray(int[][] inputArray, out int[] repeatArray) { var list = new List<int>(inputArray[0]); for (int lineNum = 1; lineNum < inputArray.Length; lineNum++) { list = list.Intersect(inputArray[lineNum]).ToList(); } repeatArray = list.ToArray(); foreach (int elements in repeatArray) Console.Write(" " + elements); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д