Category Archives: Telerik

Академия Телерик – Лекция 3 – Многомерни Масиви – Домашно – Задача 01d

Задачата е със звездичка, и въпреки че я имаше в едно от домашните, които проверявах в курса C# Part 1, реших да не гледам решението от там, а да се опитам да я напрaвя сам.

Казано накратко:

Използвам рекурсивна функция, която има 4 стъпки в себе си, като във всяка стъпка увеличавам или намалявам индекса, който трябва, като вземам предвид дълбочината на спиралата, където се намирам в момента.

На теория, всичко би трябвало да работи както трябва, но на практика – при промяната на стъпката от 4 на 1, винаги индексите на първия елемент от стъпка 1 се засичат с последния от стъпка 4, което води до толкова 0-ли накрая на спиралата, колкото пъти трябва да се мине от стъпка 4 към стъпка 1.

Проблема лесно се решава с един bypass, при който променям стойността на дадена клетка, само ако тя е 0(преди това не съм слагал нищо в нея), но ще съм благодарен на каквито и да било предложения и/или коментари относно същоността на проблема.

Всякакви коментари и предложения са добре дошли. Кода е по долу:

/*
* Write a program that fills and prints a matrix of size (n, n) as shown below: (examples for n = 4)
* 1   12   11  10
* 2   13   16  9
* 3   14   15  8
* 4   5    6   7
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace E01d_FillArraySpirally
{
class E01d_FillArraySpirally
{
static void initMatrix(int[,] array, int x, int y, int step)
{
int val = array[x, y];
int lenRows = array.GetLength(0);
int lenCols = array.GetLength(1);

if (val < lenCols * lenRows)
{
//moving on the opposite of the clock –> x goes first, y goes second
if (step == 1)// go DOWN
{
if (x + 1 < lenRows – y)
{
x = x + 1;
}
else
{
step = 2;
}
}

if (step == 2)//go RIGHT
{
if (y + 1 < lenCols – (lenRows – x – 1))
{
y = y + 1;
}
else
{
step = 3;
}
}

if (step == 3)//go UP
{
if (x – 1 >= lenCols – (y + 1))
{
x = x – 1;
}
else
{
step = 4;
}
}

if (step == 4)
{
if (y – 1 > x)
{
y = y – 1;

}
else
{
step = 1;
}
}

if (array[x, y] == 0)
{
array[x, y] = val + 1;
}

initMatrix(array, x, y, step);
}
}
static void Main(string[] args)
{
int n = 0, m = 0;
bool isNum = false;

Console.WriteLine(“please enter a number of rows:”);
while (!isNum)
{
isNum = int.TryParse(Console.ReadLine(), out n);
if (!isNum)
{
Console.WriteLine(“Please enter a valid number!”);
}
}

Console.WriteLine(“please enter a number of columns:”);
isNum = false;
while (!isNum)
{
isNum = int.TryParse(Console.ReadLine(), out m);
if (!isNum)
{
Console.WriteLine(“Please enter a valid number!”);
}
}

int[,] myArr = new int[n, m];
myArr[0, 0] = 1;

initMatrix(myArr, 0, 0, 1);

for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
Console.Write(myArr[i, j] + “\t”);
}
Console.WriteLine();
}
}
}
}

 

Академия Телерик – Лекция 2 – Масиви – Домашно – Задача 09

Пробвах да използвам възможността да съкратя времето за минаване през масива, като премахвам елементите, които вече са проверени. Получи се…:)

/*
 * Write a program that finds the most frequent number in an array. Example:
    {4, 1, 1, 4, 2, 3, 4, 4, 1, 2, 4, 9, 3} –> 4 (5 times)
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace E09_FindMostFrequentNumber
{
    class E09_FindMostFrequentNumber
    {
        static void Main(string[] args)
        {
            //decleare the variables to be used
            bool isNum = false;
            int n = 0, temp = 0, val = 0, valCount = 0, tempVal = 0, tempCount = 0;

            List<int> myArr = new List<int>();

            //start initializing the variables needed
            //get the length of the list from the console
            Console.WriteLine(“Please enter N:”);
            while (!isNum)
            {
                isNum = int.TryParse(Console.ReadLine(), out n);
                if (!isNum)
                {
                    Console.WriteLine(“Please insert a valid number”);
                }
            }

            //insert values in the list
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine(“Please enter element {0}:”, i + 1);
                isNum = false;
                while (!isNum)
                {
                    isNum = int.TryParse(Console.ReadLine(), out temp);
                    if (!isNum)
                    {
                        Console.WriteLine(“Please insert a valid number”);
                    }
                    else
                    {
                        myArr.Add(temp);
                    }
                }
            }

            //start checking the array for the most frequent number
            while (myArr.Count > 0)
            {
                //use a temporary list in order to save processing time
                List<int> tempArr = myArr.ToList();
                tempVal = tempArr[0];
                tempCount = 0;
                for (int j = 0; j < tempArr.Count; j++)
                {
                    Console.WriteLine(tempArr[j]);
                    if (tempArr[j] == tempVal)
                    {
                        myArr.Remove(tempArr[j]);
                        tempCount++;
                    }
                }
                if (tempCount > valCount)
                {
                    valCount = tempCount;
                    val = tempVal;
                    Console.WriteLine(tempVal + ” is present ” + tempCount + “times”);
                }
            }

            //print the result of the checks
            Console.WriteLine(“The most frequent element is {0}”, val);
            Console.WriteLine(“Its is present {0} times in the array.”, valCount);  
        }
    }
}