123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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<int> list_old1 = string1.Split(' ').Select(x => Convert.ToInt32(x)).ToList(); //Лист для исходных данных 1-го ст
- Console.WriteLine("Введите время выполнения работы 2 станка через пробел");
- string string2 = Console.ReadLine(); //Поле ввода 2-го столбца
- List<int> list_old2 = string2.Split(' ').Select(x => Convert.ToInt32(x)).ToList(); //Лист для исходных данных 2-го ст
- List<int> list_calculation_old = new List<int>(); //Лист подсчета времени
- 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<int> list_new1 = new List<int>(); //Два листа новых для оптимальности
- List<int> list_new2 = new List<int>();
- 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<int> list_new_calc1 = new List<int>();
- List<int> list_new_calc2 = new List<int>();
- 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<int> list1, List<int> list2) //Проверка на то, чтобы сумма 1-го столбца была больше 2-го
- {
- if (list1.Sum() > list2.Sum()) return true;
- else return false;
- }
- }
- }
|