using System;
using System.Threading;
using System.Threading.Tasks;
class Grandma
{
private int n; // Количество котиков
private int m; // Вместительность миски
private int b; // Количество корма, которое съедает один котик
private int k; // Максимальное количество котиков у миски
private int bowl; // Текущее количество корма в миске
private object mutex = new object(); // Объект для синхронизации доступа к миске
public Grandma(int n, int m, int b, int k)
{
this.n = n;
this.m = m;
this.b = b;
this.k = k;
this.bowl = this.m;
}
public void EatFromBowl(int catId)
{
lock (mutex)
{
Console.WriteLine($"Котик {catId} подошел к миске");
if (bowl >= b)
{
Console.WriteLine($"Котик {catId} кушает...");
bowl -= b;
Thread.Sleep(3000); // Котик кушает 3 секунды
Console.WriteLine($"Котик {catId} отошел от миски");
}
else
{
Console.WriteLine("Миска пуста, бабушка пополняет корм...");
bowl = m;
Console.WriteLine($"Котик {catId} кушает...");
bowl -= b;
Thread.Sleep(3000); // Котик кушает 3 секунды
Console.WriteLine($"Котик {catId} отошел от миски");
}
}
}
public void FeedCats()
{
Task[] tasks = new Task[n];
for (int i = 0; i < n; i++)
{
int catId = i;
tasks[i] = Task.Run(() => EatFromBowl(catId));
}
Task.WaitAll(tasks);
}
}
class Program
{
static void Main(string[] args)
{
Console.Write("Введите количество котиков: ");
int n = int.Parse(Console.ReadLine());
Console.Write("Введите вместительность миски: ");
int m = int.Parse(Console.ReadLine());
Console.Write("Введите количество корма, которое съедает один котик: ");
int b = int.Parse(Console.ReadLine());
Console.Write("Введите максимальное количество котиков у миски: ");
int k = int.Parse(Console.ReadLine());
Grandma grandma = new Grandma(n, m, b, k);
DateTime startTime = DateTime.Now;
grandma.FeedCats();
DateTime endTime = DateTime.Now;
TimeSpan elapsedTime = endTime - startTime;
Console.WriteLine($"Время, потребовавшееся на накормление всех котиков: {elapsedTime.TotalSeconds:F0} секунд");
}
}