C#

.NET отворени врати Ментормейт

0

Icreown-software Юли е месец на отворените врати за Ментормейт във Варна, като на фокус са .NET технологиите!
Целта на събитието е ИТ специалисти да се запознаят с нашата култура, проекти и предизвикателства, които срещаме всекидневно в работата си. Всички .NET-ъри са поканени, като условието е да се запишат тук като си изберат подходяща за тях дата. Очакваме ви!

Share

C# курс – Домашно масиви Задачи 6 – 10

0

Задача 6: Write a program that reads two integer numbers N and K and an array of N elements from the console. Find in the array those K elements that have maximal sum.

За тази задача има отделна тема тук, тъй като съм добавила малко по-подробно описание.

Задача 7: Sorting an array means to arrange its elements in increasing order. Write a program to sort an array. Use the “selection sort” algorithm: Find the smallest element, move it at the first position, find the smallest from the rest, move it at the second position, etc.

Задачата се решава с два цикъла, като последователно се сравнява всеки един елемент с останалите и ако е по-голям от текущия елемент, двете стойности се разменят. Прави се докато не се сортират всички стойности на масива.
Решение

Задача 8: Write a program that finds the sequence of maximal sum in given array.
Example: {2, 3, -6, -1, 2, -1, 6, 4, -8, 8} -> {2, -1, 6, 4}
Can you do it with only one loop (with single scan through the elements of the array)?

Тази задача съм я решила също с два цикъла.
Решение

Задача 9: 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)

Последователно се обхождат всички елементи и се сравняват. Ако стойността на сравняваните елементи е равна, те се натрупват в променлива currentTimes.
Решение

Задача 10: Write a program that finds in given array of integers a sequence of given sum S (if present). Example: {4, 3, 1, 4, 2, 5, 8}, S=11 -> {4, 2, 5}

Тази задача съм я решила аналогично на предходните, с тази разлика че сумирам елементите исравнявам дали до момента сумата им не е равна на въведената S. Ако има такава сума на последователни елеменети, те се разпечатват.
Решение

Share

C# курс – Домашно масиви Задачи 1 – 5

0

Задача 1: Write a program that allocates array of 20 integers and initializes each element by its index multiplied by 5. Print the obtained array on the console.

Обхождане на масива и умношение на всеки индекс с 5.
Решение

Задача 2: Write a program that reads two arrays from the console and compares them element by element.

Сравняване на масиви.
Решение

Задача 3: Write a program that compares two char arrays lexicographically (letter by letter).

Доста си поиграх да проуча тази задача и как точно се решава правилно. Намерих една доста интесесна статия, в която много ясно се обяснява как се сравняват string/char лексикографски: Link

Когато двата стринга са с различна дължина и символите им съвпадат до толкова, колкото е по-късият стринг, тогава лексикографски по-предият е този с по-малката дължина. Например, “abcd” е преди “abcde”. Т.е. трябва да се вземе под внимание и последният char от стринга, а не просто да се итерира до броя на всички символи на по-малкия от двата стринга.

Направила съм проверка дали работи коректно чрез използване и на вградената в .NET функция CompareTo. Използвала съм я само за проверка и съм я закоментирала, а не за да си реша задачата чрез нея. Според мен не е това целта на това домашно, а да упражним използването на масиви.
Решение

Задача 4: Write a program that finds the maximal sequence of equal elements in an array.
Example: {2, 1, 1, 2, 3, 3, 2, 2, 2, 1} -> {2, 2, 2}

Запазване на първата стойност от масива в променлива start, след което тя се сравнява с всеки следващ елемент и ако е равна на него се увеличава стойността на променливата lenght. В противен случай, в променливата start се запзва новата стойност.
Решение

Задача 5: Write a program that finds the maximal increasing sequence in an array. Example: {3, 2, 3, 4, 2, 2, 4} -> {2, 3, 4}.

тук се сравняват текущият елемент от обхождания масив, с всеки следващ елемент, докато не се стигне до стойност, която е по-малка от последната. В този случай се започва отначало, като се пазят най-голямата редица до момента и последния индекс. Той се използва за принтиране на резултата.
Решение

Share

C# курс – Домашно масиви Задача 6

3

Тук ще опиша накратко как съм решила задача 6 от темата Масиви от курса по C#.

Условието на задачата е:
Write a program that reads two integer numbers N and K and an array of N elements from the console. Find in the array those K elements that have maximal sum.

На първа стъпка се инициализират необходимите променливи. Освен N и K се заделя памет и за sum – където ще струпа текущата сума на елементите, bestSum – където ще се съхранява последната най-голяма сума, tmpIndex – където ще се пази временно информация за последния индекс от масива, в който е намерена най-голямата сума и променливата endIndexOfMax, която също съдържа последният индекс от масива, където сумата е най-голяма.

Проверявам дали въведените данни са коректни и продължавам, ако е така.

using System;

/*
 * 6. Write a program that reads two integer numbers N and K and an array of N elements
 * from the console. Find in the array those K elements that have maximal sum.
 */
class MaximalSum
{
	static void Main()
	{
		int n = 6;
		int k = 3;
		int sum = 0;
		int bestSum = int.MinValue;
		int tmpIndex = 0;
		int endIndexOfMax = 0;

		Console.Write("N = ");
		string strN = Console.ReadLine();

		Console.Write("K = ");
		string strK = Console.ReadLine();

		if (!int.TryParse(strN, out n) || !int.TryParse(strK, out k) || k > n)
		{
			Console.WriteLine("Invalid numbers!");
		}

На следваща стъпка се инициализира масива с въведени от потребителя стойности.

int[] array = new int[n];

// Get all array values
for (int i = 0; i < n; i++)
{
    Console.Write("Please enter array element: ");
    array[i] = int.Parse(Console.ReadLine());
}

Следва и най-съществената част от кода – функционалността за намиране на онези поредни K елемента, които имат максимална сума.

for (int j = 0; j < n - k + 1; j++)
{
   for (int p = j; p < k + j; p++) 				
   { 					
       sum += array[p]; 					
       tmpIndex = p; 				
    } 				

    if (sum > bestSum)
    {
        bestSum = sum;
        endIndexOfMax = tmpIndex;
    }

    sum = 0;
}

Използвани са два вложени масива. Първият обхожда всички елементи с индекс от 0 до N – K + 1, тъй като не е необходимо да се стига до последния елемент, а само до този, чийто брой следващи елементи е равен на K + 1.

Съответно за всяка стойност на променливата j се обхожда вътрешния масив, който започва от j и приключва до K + j. Така на всяка стъпка ще се обхождат точно К на брой елемента, които започват от индекс j и завършват до K + j. В променливата sum се натрупва цялата сума от тези елементи. Във временната променлива tmpIndex се пази последния индекс, тъй като той ще трябва по-късно, за да могат да се обходят всички К елементи до този индекс. След това проверяваме дали текущата сума е по-голяма от най-добрата до момента, и ако е така я съхраняваме в bestSum. А също и се запазва последният индекс на масива в endIndexOfMax, за да може да бъде достъпен извън втория цикъл. След това се нулира последната сума, за да се започне от начало на всяка следваща итерация от първия цикъл.

Накрая се разпечатват поредните елементи с най-голяма сума.

Console.WriteLine("The maximal sum of {0} sequent elements is: {1}", k, bestSum);
Console.Write("{ ");

for (int i = endIndexOfMax - k + 1; i <= endIndexOfMax; i++)
{
    if (i == endIndexOfMax)
    {
        Console.Write("{0}", array[i]);
    }
    else
    {
        Console.Write("{0}, ", array[i]);
    }
}

Console.WriteLine(" }");

Тук можете да видите цялото решение.

Надявам се да ви е полезно 🙂

Share
Go to Top