[Randomizer] Nurbolat Solution
Alemkhan
csharp
2 years ago
4.9 kB
6
Indexable
using System;
string[] names = new string[]
{
"name1",
"name2",
"name3",
"name4",
"name5",
};
void Menu()
{
Console.WriteLine(
"Добро пожаловать в рандомайзер!\n" +
"################################\n" +
"1. Показать все имена\n" +
"2. Добавить имена\n" +
"3. Получить случайные имена\n" +
"4. Получить случайные команды"
);
int input = Convert.ToInt32(Console.ReadLine());
switch (input)
{
case 1:
PrintNames();
break;
case 2:
AddNames();
break;
case 3:
RandomNames();
break;
case 4:
CreateRandomTeam();
break;
}
}
void PrintNames()
{
int i = 1;
foreach (string name in names)
{
Console.WriteLine($"{i}. {name}");
i++;
}
Console.WriteLine("--------------------");
Pause();
Menu();
}
void AddNames()
{
Console.WriteLine("Напишите все имена через пробел");
string? tempNames = Console.ReadLine();
string[] tempArrayNames = tempNames.Split(" ");
string[] tempArray = new string[tempArrayNames.Length + names.Length];
for (int i = 0; i < names.Length; i++)
{
tempArray[i] = names[i];
}
for (int i = names.Length; i < tempArray.Length; i++)
{
tempArray[i] = tempArrayNames[i - names.Length];
}
names = tempArray;
Console.WriteLine("Имена успешно сохранились!");
Pause();
Menu();
}
string[] RandomElements(int input)
{
Random random = new Random();
string[] tempElements = new string[names.Length];
int i = 0;
while (i < input)
{
int randomIndex = random.Next(names.Length);
string randomName = names[randomIndex];
while (tempElements.Contains(randomName))
{
randomIndex = random.Next(names.Length);
randomName = names[randomIndex];
}
tempElements[i] = randomName;
i++;
}
return tempElements;
}
void RandomNames()
{
Console.WriteLine(
$"Сколько имен хотите в диапазоне от 0 до {names.Length}"
);
int input = Convert.ToInt32(Console.ReadLine());
if (input > 0 && input <= names.Length)
{
string[] tempNames = RandomElements(input);
Console.WriteLine("Случайные имена:");
foreach (string tempName in tempNames)
{
Console.WriteLine(tempName);
}
Pause();
Menu();
}
}
void CreateRandomTeam()
{
Console.WriteLine($"Введите количество участников в одной команде (число не должно быть больше чем {names.Length})");
int teamSize = Convert.ToInt32(Console.ReadLine());
if (teamSize <= 0 || teamSize > names.Length)
{
Console.WriteLine("Неверный ввод. Пожалуйста, укажите корректное количество участников в команде.");
Pause();
Menu();
return;
}
Random random = new Random();
string[] remainingNames = new string[names.Length];
Array.Copy(names, remainingNames, names.Length);
int numberOfTeams = (int)Math.Ceiling((double)names.Length / teamSize);
string[][] teams = new string[numberOfTeams][];
for (int i = 0; i < numberOfTeams; i++)
{
int currentTeamSize = Math.Min(teamSize, remainingNames.Length);
teams[i] = new string[currentTeamSize];
for (int j = 0; j < currentTeamSize; j++)
{
int randomIndex = random.Next(remainingNames.Length);
teams[i][j] = remainingNames[randomIndex];
string[] tempNames = new string[remainingNames.Length - 1];
Array.Copy(remainingNames, 0, tempNames, 0, randomIndex);
Array.Copy(remainingNames, randomIndex + 1, tempNames, randomIndex, remainingNames.Length - randomIndex - 1);
remainingNames = tempNames;
}
}
Console.WriteLine($"Количество участников в команде: {teamSize}\n");
for (int i = 0; i < numberOfTeams; i++)
{
Console.WriteLine($"Команда {i + 1}: {string.Join(", ", teams[i])}");
}
Pause();
Menu();
}
Menu();
void Pause()
{
Console.WriteLine("Нажмите на любую клавишу для возвращение в меню");
Console.ReadKey();
Console.Clear();
}Editor is loading...
Leave a Comment