Може да го инициализираш само вътре в while-a, отвън никъде не се използва.
int[] nums = Console.ReadLine().Split().Select(int.Parse).ToArray();
int rotations = int.Parse(Console.ReadLine());
int[] arrSum = new int[nums.Length];
while (rotations > 0)
{
int[] rotated = new int[nums.Length];
rotated[0] = nums[nums.Length - 1];
arrSum[0] += rotated[0];
for (int i = 1; i < nums.Length; i++)
{
rotated[i] = nums[i - 1];
arrSum[i] += rotated[i];
}
rotations--;
nums = rotated;
}
Console.WriteLine(string.Join(" ", arrSum));
Алтернативен вариант със списък:
List<int> nums = Console.ReadLine().Split().Select(int.Parse).ToList();
int k = int.Parse(Console.ReadLine());
List<int> sumArr = new List<int>();
for (int i = 0; i < nums.Count; i++) sumArr.Add(0);
while (k > 0)
{
int temp = nums[nums.Count - 1];
nums.RemoveAt(nums.Count - 1);
nums.Insert(0, temp);
for (int i = 0; i < nums.Count; i++) sumArr[i] += nums[i];
k--;
}
Console.WriteLine(string.Join(" ", sumArr));
Според мен е свързано с присвояването на един масив върху друг. Като го присвояваш ти казваш просто, че нъмс започва да сочи към паметта, където ротейтед е пазило данните си. След това инициализираш ротейтед и той започва да сочи към ново място. С всяко инициализиране той се изчиства и се декларира нов чист.
Реално не е добра практика, според мен, аз бих до направил с някакво copy и след това clear на rotated.
Не съм 100% сигурен, че отговорът ми е релевантен, а и няма как да тествам идейте си, защото , поради някаква причина е заключен джъджа...
Не е заключен. Преди малко събмитнах решението. Иначе темата я обсъждахме преди месец. Сега само добавих алтернативно решение.
То може, ама пак не разбирам защо трябва да инициализирам още веднъж в цикъла, ако вече съм го направил извън него. nums също се ползва само в цикъла, но е инициализиран извън него.
Ти ли си писал този код. Ако не си, разбирам но не съвсем защо не схващаш. Няма смисъл от двете инициализации. По-горе съм ти показал как да го направиш.
Аз съм го писал и зададох конкретен въпрос.