using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Method_Jonson { internal class Jonson { public void Jonson_Method() { Console.WriteLine("Введите время выполнения работы 1 станка через пробел"); string string1 = Console.ReadLine(); //Поле ввода 1-го столбца List list_old1 = string1.Split(' ').Select(x => Convert.ToInt32(x)).ToList(); //Лист для исходных данных 1-го ст Console.WriteLine("Введите время выполнения работы 2 станка через пробел"); string string2 = Console.ReadLine(); //Поле ввода 2-го столбца List list_old2 = string2.Split(' ').Select(x => Convert.ToInt32(x)).ToList(); //Лист для исходных данных 2-го ст List list_calculation_old = new List(); //Лист подсчета времени int count_index = list_old1.Count; if (Bool_Proverka_Sum(list_old1, list_old2) == true) { for (int i = 0; i <= count_index; i++) //Подсчет времени для исходных данных { if(i==0) list_calculation_old.Add(list_old1[i]); else { list_calculation_old.Add(list_old1.Take(i).Sum() + (-1) * list_old2.Take(i - 1).Sum()); } } Console.WriteLine("Оценка при начальных данных: "+list_calculation_old.Max()); List list_new1 = new List(); //Два листа новых для оптимальности List list_new2 = new List(); for (int i = count_index-1; i >= 0; i--) //Цикл перетаскивания строк по алгоритму { int min_el = Math.Min(list_old1.Min(),list_old2.Min()); if(list_old1.IndexOf(min_el) != -1) { int min_index = list_old1.IndexOf(min_el); list_new1.Add(list_old1[min_index]); list_new1.Add(list_old2[min_index]); list_old1.RemoveAt(min_index); list_old2.RemoveAt(min_index); } else { int min_index = list_old2.IndexOf(min_el); list_new2.Add(list_old2[min_index]); list_new2.Add(list_old1[min_index]); list_old2.RemoveAt(min_index); list_old1.RemoveAt(min_index); } } list_calculation_old.Clear(); //Очистка листа list_new2.Reverse(); List list_new_calc1 = new List(); List list_new_calc2 = new List(); for (int i = 0; i < list_new1.Count; i++) { i++; list_new_calc1.Add(list_new1[i - 1]); list_new_calc2.Add(list_new1[i]); } for (int i = 0; i < list_new2.Count; i++) { i++; list_new_calc1.Add(list_new2[i - 1]); list_new_calc2.Add(list_new2[i]); } for (int i = 1; i < list_new_calc1.Count; i++) //Сортировка { if (list_new_calc1[i] == list_new_calc1[i - 1]) { if (list_new_calc2[i] > list_new_calc2[i - 1]) { int cup = list_new_calc2[i - 1]; list_new_calc2[i-1] = list_new_calc2[i]; list_new_calc2[i] = cup; } } else if (list_new_calc2[i] == list_new_calc2[i - 1]) { if (list_new_calc1[i] < list_new_calc1[i - 1]) { int cup = list_new_calc1[i - 1]; list_new_calc1[i - 1] = list_new_calc1[i]; list_new_calc1[i] = cup; } } } for (int i = 0; i <= count_index; i++) //Подсчет времени сортированных столбцов { if (i == 0) list_calculation_old.Add(list_new_calc1[i]); else { list_calculation_old.Add(list_new_calc1.Take(i).Sum() + (-1) * list_new_calc2.Take(i - 1).Sum()); } } for (int i = 0; i < list_new_calc1.Count; i++) //Вывод { Console.WriteLine(list_new_calc1[i]+" " + list_new_calc2[i]); } Console.WriteLine("Оценка после метода: " + list_calculation_old.Max()); } } public bool Bool_Proverka_Sum(List list1, List list2) //Проверка на то, чтобы сумма 1-го столбца была больше 2-го { if (list1.Sum() > list2.Sum()) return true; else return false; } } }