Loading...
geiff avatar geiff 71 Точки

[Homework] Advanced C# - 01.Arrays, Lists, Stacks, Queues

Здравейте, колеги

Прилагам своите решения на домашното от лекцията: Arrays, Lists, Stacks, Queues: http://github.com/geiff/Advanced-CSharp-Homework-01.Arrays-Lists-Stacks-Queues

Всякакви предложения за корекции и съвети са добре дошли :)

 

 

Тагове:
3
C# Advanced 10/02/2016 05:16:03
butanfire avatar butanfire 32 Точки

Lego-тата направих с Dictionary<int,List<int>> , малко по-лесно за разбиране и една идея по-бързо трябва да е. :)

 

Относно Pythagorean Numbers и Stuck Numbers :

Единствената забележка/потенциален проблем с тези въртежи на цикли, е че за да избегнеш масивно писане, трябва да се напише с рекурсия, в случаите за N на брой въртене.

Примерно за N такива числа a*b*c*d*e*f*g*h*j....*n, трябва да се изпишат N for-loops.

Въпреки че съм съгласен, че се приема подхода спрямо всяка задача! :)


За Pythagorean Numbers (както и за StuckNumbers) , може да си изнесеш числата arrayOfNumbers[indexA] в int променлива numberA - за четимост, за да излежда така :

if (numberA <= numberB && Math.Pow(numberA,2) + Math.Pow(numberB,2) == Math.Pow(numberC,2))

вместо така :

if (arrayOfNumbers[indexA] <= arrayOfNumbers[indexB] &&
                            arrayOfNumbers[indexA] * arrayOfNumbers[indexA] +
                                arrayOfNumbers[indexB] * arrayOfNumbers[indexB] ==
                                arrayOfNumbers[indexSum] * arrayOfNumbers[indexSum])

П.С Сега ме мързи да upload-на кода за Lego-тата, но тия дни ще го кача! :))

 

Поздрави,

Владо

1
geiff avatar geiff 71 Точки

За Pythagorean Numbers и Stuck Numbers и аз си мислех за рекурсия, но така и не я измислих. Съгласна съм че ще е подобре да изнеса в променливи числата arrayOfNumbers[indexA] .Ще се радвам когато имаш възможност да качиш кода за Lego-тата. Благодаря за коментарите и лека вечер :)

0
butanfire avatar butanfire 32 Точки

Понеже имам проблем със SSL тунела с GitHub от работа, реших направо да го paste-na :

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace LegoBlocks
{
    public class LegoBlocks
    {
        public static void Main(string[] args)
        {
            int numOfRows = int.Parse(Console.ReadLine());
            Dictionary<int, List<int>> matrix = new Dictionary<int, List<int>>();
            
            for (int i = 0; i < 2 * numOfRows; i++)
            {
                var input = Console.ReadLine()
                    .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(int.Parse)
                    .ToList();

                matrix.Add(i, input); //we use the iterator as a key, and the 2nd array is  numOfRows + i
            }

            List<int> matrixRowLength = new List<int>(); //list will check the length of the resulting matrix
            
            for (int i = 0; i < numOfRows; i++)
            {
                int sum = matrix[i].Count + matrix[i + numOfRows].Count; //calculate the number of elements from both arrays for each line
                matrixRowLength.Add(sum);
            }

            bool canArraysFit = true;
            for (int i = 0; i < matrixRowLength.Count - 1; i++)
            {
                canArraysFit = matrixRowLength[i] == matrixRowLength[i + 1]; //if there is a row in the sequence, which is not equal to the others, then the arrays cannot fit
            }

            if (!canArraysFit)
            {
                Console.WriteLine("The total number of cells is: {0}", matrixRowLength.Sum());
            }
            else
            {
                Dictionary<int, List<int>> resultMatrix = new Dictionary<int, List<int>>(); //result matrix will be used for the output
                for (int i = 0; i < numOfRows; i++)
                {
                    matrix[i + numOfRows].Reverse(); //reverse the line from the 2nd array
                    resultMatrix.Add(i, matrix[i]); //add the first line from the 1st array
                    resultMatrix[i].AddRange(matrix[i + numOfRows]); //add the reversed line

                    Console.WriteLine(string.Format("[{0}]", string.Join(", ", matrix[i]))); //output the result
                }
            }
        }
    }
}

 

1
butanfire avatar butanfire 32 Точки

Също не успях със рекурсията, най-много да изкарам всичко комбинации/вариации на двойките числа от редицата. (с повторения обаче).

Това усложнява нататъка проверката, но би трябвало да е постижимо в крайна сметка, нямам време да му заделя :(

 

Но в крайна сметка едва ли може да стане всичко в една функция, трябва поотделно да се разцепят нещата, защото имаме :

1) Изваждане на двойките числа (както ред 21 и 27 от кода ти)

2) Проверка за уникалност на числата + проверка на двойките

3) Отпечатване на числата във формата.

 

Може би най-доброто решение е наистина влагането на циклите, пример :

https://judge.softuni.bg/Contests/4/CSharp-Basics-Exam-11-April-2014-Morning

8 вложени цикъла - авторско решение.

 

Така че, много добра работа! :)

 

Поздрави,

Владо

 

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