Loading...
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

A question on 2. Rotate and Sum from Exercises: Arrays

Problem
Solution

Няма проблем със самото решение, защото дава 100%, но все пак не разбирам един ред код, който добавих, за да работи то, а именно ред 20:
 

rotated = new int[nums.Length];  

Защо е необходимо повторно да инициализирам масива rotated и защо без тази инициализация програмата не работи? surprise

0
Programming Fundamentals
vancho avatar vancho 430 Точки

Може да го инициализираш само вътре в 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));

-1
17/08/2016 17:46:47
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

То може, ама пак не разбирам защо трябва да инициализирам още веднъж в цикъла, ако вече съм го направил извън него. nums също се ползва само в цикъла, но е инициализиран извън него.

0
vancho avatar vancho 430 Точки

Ти ли си писал този код. Ако не си, разбирам но не съвсем защо не схващаш. Няма смисъл от двете инициализации. По-горе съм ти показал как да го направиш.

-1
17/08/2016 18:02:27
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Аз съм го писал и зададох конкретен въпрос.

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Алтернативен вариант със списък:
 

        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));

 

0
Alex0101 avatar Alex0101 374 Точки

Според мен е свързано с присвояването на един масив върху друг. Като го присвояваш ти казваш просто, че нъмс започва да сочи към паметта, където ротейтед е пазило данните си. След това инициализираш ротейтед и той започва да сочи към ново място. С всяко инициализиране той се изчиства и се декларира нов чист.

 Реално не е добра практика, според мен, аз бих до направил с някакво copy и след това clear на rotated.

Не съм 100% сигурен, че отговорът ми е релевантен, а и няма как да тествам идейте си, защото , поради някаква причина е заключен джъджа...

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Не е заключен. Преди малко събмитнах решението. Иначе темата я обсъждахме преди месец. Сега само добавих алтернативно решение.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.