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