Помогите исправить код на C# Задача:
Даны массив x[1..n] целых чисел и число y.Переставить числа в массиве таким образом, чтобы слева от некоторых границы стояли числа, меньше или равные y, а справа - больше или равны y.
Не работает с отрицательными числами.Буду очень благодарен
Вот сам код
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите размер массива: ");
int n = int.Parse(Console.ReadLine());
int[] x = new int[n];
Console.WriteLine("Введите элементы массива:");
for (int i = 0; i < n; i++)
{
x[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Введите число y: ");
int y = int.Parse(Console.ReadLine());
int left = 0;
int right = n - 1;
for (int i = 0; i < n; i++)
{
if (x[left] <= y)
{
left++;
}
else
{
for (int j = n - 1; j >= 0; j--)
{
if (x[right] >= y)
{
right--;
}
else
{
int temp = x[left];
x[left] = x[right];
x[right] = temp;
left++;
right--;
break;
}
}
}
if (left > right)
{
break;
}
}
Console.Write("Переставленный массив: ");
for (int i = 0; i < n; i++)
{
if (i == left)
{
Console.Write("| ", y);
}
Console.Write(x[i] + " ");
}
Console.ReadKey();
}
}
}
C#
Помогите исправить код на C#
Проблема в данном коде заключается в том, что при работе с отрицательными числами условие if (x[left] <= y) не срабатывает корректно. Для решения этой проблемы можно использовать следующий код:
ini
Copy code
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите размер массива: ");
int n = int.Parse(Console.ReadLine());
int[] x = new int[n];
Console.WriteLine("Введите элементы массива:");
for (int i = 0; i < n; i++)
{
x[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Введите число y: ");
int y = int.Parse(Console.ReadLine());
int left = 0;
int right = n - 1;
while (left <= right)
{
while (x[left] <= y && left < n - 1)
{
left++;
}
while (x[right] > y && right > 0)
{
right--;
}
if (left <= right)
{
int temp = x[left];
x[left] = x[right];
x[right] = temp;
left++;
right--;
}
}
Console.Write("Переставленный массив: ");
for (int i = 0; i < n; i++)
{
Console.Write(x[i] + " ");
}
Console.ReadKey();
}
}
Данный код использует два цикла while для поиска элементов, которые нужно переставить. Внутри цикла while происходит проверка на соответствие условию и инкремент/декремент соответствующего указателя. Если указатели не пересеклись, то происходит обмен элементов. В конце программы выводится переставленный массив.
ini
Copy code
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите размер массива: ");
int n = int.Parse(Console.ReadLine());
int[] x = new int[n];
Console.WriteLine("Введите элементы массива:");
for (int i = 0; i < n; i++)
{
x[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Введите число y: ");
int y = int.Parse(Console.ReadLine());
int left = 0;
int right = n - 1;
while (left <= right)
{
while (x[left] <= y && left < n - 1)
{
left++;
}
while (x[right] > y && right > 0)
{
right--;
}
if (left <= right)
{
int temp = x[left];
x[left] = x[right];
x[right] = temp;
left++;
right--;
}
}
Console.Write("Переставленный массив: ");
for (int i = 0; i < n; i++)
{
Console.Write(x[i] + " ");
}
Console.ReadKey();
}
}
Данный код использует два цикла while для поиска элементов, которые нужно переставить. Внутри цикла while происходит проверка на соответствие условию и инкремент/декремент соответствующего указателя. Если указатели не пересеклись, то происходит обмен элементов. В конце программы выводится переставленный массив.
Андрей Королев
Пошла вон нейронка!
А ты думал, что сегодня захотят неправильную ; поставить
Cергей Перекрест
Так им и ответить шуткой надо...
На 1 Апреля им и этого хватит.
После стоки
int y = int.Parse(Console.ReadLine());
... все убери и вставь это
После стоки
int y = int.Parse(Console.ReadLine());
... все убери и вставь это
Console.Write("Переставленный массив: ");
Array.Sort(x); // отсортируй массив
var idxY = Array.LastIndexOf(x, y); // найди последний искомый индекс
// ... и поставь после него сепаратор
var result = string.Join("", x.Select((v, i) => v.ToString() + (i == idxY ? " | " : " ")));
Console.Write(result);
Console.ReadKey();
UPD: Чуть не забыл. В начале файла добавь "using System.Linq;"Похожие вопросы
- Помогите исправить код пожалуйста
- C#: помогите, пожалуйста, исправить код
- Помогите с кодом C#!!
- Зачем разбивать код в C# на отдельные классы?
- Помогите исправить сложную программу на C#
- Помогите расписать код C#, как можно подробно, заранее спасибо!
- Помогите исправить ошибку в коде.
- Помогите разобраться с заданием! C#
- Помогите пожалуйста. Написать на C#
- Нужно написать код на C#