Поиск повторяющихся элементов - 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);
}