Числа не будут следовать при смещении массива влево - PullRequest
0 голосов
/ 24 октября 2019

Числа могут сдвигаться влево => проверка.

За ним следует только первое число в массиве, остальные исчезают.
Пример того, как это сейчас:

Массив ввода: 1 2 3 4 5 6
Ввести, сколько раз сдвинуть влево: 3
Вывод: 4 5 6 1
КакВывод должен быть: 4 5 6 1 2 3

Может кто-нибудь помочь познакомился с этим, вероятно, простым решением, которое я не могу найти.

var str = Console.ReadLine();
int shift = Convert.ToInt32(Console.ReadLine());
var strArray = str.Split(' ');
var x = strArray[0];

for (var i = 0; i < strArray.Length - shift; i++)
{
    strArray[i] = strArray[i + shift];
}

strArray[strArray.Length - shift] = x;

for (var i = 0; i <= strArray.Length - shift; i++)
{
    Console.Write(strArray[i] + ' ');
}

Ответы [ 3 ]

3 голосов
/ 24 октября 2019

Вот быстрое решение для вас. пожалуйста, проверьте следующий код.

Я сдвигаю элемент влево на 1 позицию, вы можете изменить код в соответствии с вашими требованиями.

Массив ввода: 1 2 3 4 5 6

Вводсколько раз сдвинуть влево: 1

Вывод: 2 3 4 5 6 1

    int[] nums = {1, 2, 3, 4, 5, 6};
    Console.WriteLine("\nArray1: [{0}]", string.Join(", ", nums));
    var temp = nums[0];
    for (var i = 0; i < nums.Length - 1; i++)
    {
        nums[i] = nums[i + 1];
    }
    nums[nums.Length - 1] = temp;
    Console.WriteLine("\nAfter rotating array becomes: [{0}]", string.Join(", ", nums));
1 голос
/ 24 октября 2019

Вы можете использовать Linq для выполнения вашей смены, вот простой метод, который вы можете использовать

    public int[] shiftRight(int[] array, int shift)
    {
        var result = new List<int>();
        var toTake = array.Take(shift);
        var toSkip = array.Skip(shift);

        result.AddRange(toSkip);
        result.AddRange(toTake);

        return result.ToArray();
    }
0 голосов
/ 24 октября 2019

Если это только для строк и необходим перенос по кругу, я бы предложил использовать str.Substring(0,shift) и добавить его к str.Substring(shift) (не пытайтесь заново изобретать weel) (некоторая информация о методе подстроки: String.Substring )

в противном случае причина, по которой он не работает, заключается в том, что вы сохранили только первое значение массива вместо всех значений, которые вы хотите сместить.


Не сохраняйте только первое значение в массиве

var x = strArray[0];

вместо этого используйте

string[] x = new string[shift];
for (int i = 0; i < shift; i++)
{
    x[i] = strArray[i];
}

, чтобы собрать все значения, которые необходимо добавить в конец.

РЕДАКТИРОВАТЬ: забыл сдвиг

Сдвиг старых данных влево

for (int i = 0; i < strArray.Length-shift; i++)
{
    strArray[i] = strArray[i+shift];
}

И заменить

strArray[strArray.Length - shift] = x;

на

for(int i = 0; i < x.Length; i++){
    int newlocation = (strArray.Length - shift)+i;
    strArray[newlocation] = x[i];
}

также заменит цикл печати для

Console.WriteLine(string.Join(" ", strArray));

, что упрощает его и делает его одной строкой вместо трех строк кода.

(также документы для функции Join string.join )

...