Advertisement
n4wn4w

c# terelik

Apr 21st, 2015
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 24.51 KB | None | 0 0
  1. 1 zadacha
  2.  
  3.  
  4. /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.  
  6.         int[] myArr = new int[20];
  7.  
  8.         for (int i = 0; i < myArr.Length; i++)
  9.         {
  10.             myArr[i] = i * 5;
  11.         }
  12.  
  13.         for (int i = 0; i < myArr.Length; i++)
  14.         {
  15.             Console.WriteLine(myArr[i]);
  16.         }
  17.     }
  18. }
  19.  
  20. //ОПИСАНИЕ: Инициализираме масив от 20 елемента. С for цикъл обхождаме елементите му всеки един от които го умножаваме по 5.
  21. //След това с втория for цикъл принтираме резултата на конзолата.
  22.  
  23.  
  24. Problem 2. Compare arrays///////////////////////////////////////////////////////////////////////////////////
  25.  //Write a program that reads two arrays from the console and compares them element by element
  26.  
  27.         Console.WriteLine("Pleas enter the lenght of the FIRST Array:");
  28.         int f = int.Parse(Console.ReadLine());
  29.         int[] firstArr = new int[f];
  30.  
  31.         Console.WriteLine("Pleas enter the lenght of the SECOND Array:");
  32.         int s = int.Parse(Console.ReadLine());
  33.         int[] secondArr = new int[s];
  34.  
  35.         if (firstArr.Length != secondArr.Length)
  36.         {
  37.             Console.WriteLine("Error! The FIRST Array lenght and the SECOND Array lenght are not equal. Please try again and enter EQUAL array lenghts");
  38.         }
  39.  
  40.         for (int i = 0; i <= firstArr.Length - 1; i++)
  41.         {
  42.             Console.WriteLine("Please enter the {0} number of FIRST array", i);
  43.             firstArr[i] = int.Parse(Console.ReadLine());
  44.         }
  45.  
  46.         for (int i = 0; i <= secondArr.Length - 1; i++)
  47.         {
  48.             Console.WriteLine("Please enter the {0} number of SECOND array", i);
  49.             secondArr[i] = int.Parse(Console.ReadLine());
  50.         }
  51.  
  52.         bool areEqual = true;
  53.         for (int i = 0; i < secondArr.Length; i++)
  54.         {
  55.             if (firstArr[i] != secondArr[i])
  56.             {
  57.                 areEqual = false;
  58.                 break;
  59.             }
  60.         }
  61.  
  62.         Console.WriteLine("The two arrays are equal: {0}", areEqual);
  63.     }
  64. }
  65.  
  66. //ОБЯСНЕНИЕ: Първото нещо, което правим е да инициализираме самия размер на двата масива.
  67. //Макар и незадължително по условие, с помоща на if условието проверяваме дали броя на елементите в двата масива са равни.
  68. //Това може и да не го правим, ако просто накараме потребителя веднъж да въведе число за размера на масивите (веднъж като го въведе ще го ползваме същата променлива при инициализацията и на втория масив).
  69. //След това с помощта на for цикли въвеждаме самите стойности из одтелните позиции на двата масива.
  70. //Преминаваме към същинската част на задачата - сравняване на самите отделни стойности в масива една по една. Използваме булева променлива, в която изначално казваме че елементите в двата масива са равни, до доказване на противното.
  71. //С помощта на for цикъл започваме да сравняваме отделните елементи на масивите един по един.
  72. //В случай че два елемента от една и съща позиция в масивите се случи да не са равни се изпълнява if условието, променливата, която съзадохе по-горе вече става false и се прехвърляме към break оператъра, тъй като при това положение няма смисъл да продължаваме да сравняваме останалите елементи из масивите.
  73. //Отпечатваме резолтата на конзолата.
  74.  
  75.  
  76.  
  77.  
  78. Problem 3. Compare char arrays ////////////////////////////////////////////////////////////////////////////
  79.  
  80.  
  81. //Write a program that reads two arrays from the console and compares them element by element
  82.  
  83.             Console.WriteLine("Pleas enter the lenght of the FIRST Array:");
  84.             int f = int.Parse(Console.ReadLine());
  85.             int[] firstArr = new int[f];
  86.  
  87.             Console.WriteLine("Pleas enter the lenght of the SECOND Array:");
  88.             int s = int.Parse(Console.ReadLine());
  89.             int[] secondArr = new int[s];
  90.  
  91.             if (firstArr.Length != secondArr.Length)
  92.             {
  93.                 Console.WriteLine("Error! The FIRST Array lenght and the SECOND Array lenght are not equal. Please try again and enter EQUAL array lenghts");
  94.             }
  95.  
  96.             for (int i = 0; i <= firstArr.Length - 1; i++)
  97.             {
  98.                 Console.WriteLine("Please enter the {0} number of FIRST array", i);
  99.                 firstArr[i] = char.Parse(Console.ReadLine());
  100.             }
  101.  
  102.             for (int i = 0; i <= secondArr.Length - 1; i++)
  103.             {
  104.                 Console.WriteLine("Please enter the {0} number of SECOND array", i);
  105.                 secondArr[i] = char.Parse(Console.ReadLine());
  106.             }
  107.  
  108.             bool areEqual = true;
  109.             for (int i = 0; i < secondArr.Length; i++)
  110.             {
  111.                 if (firstArr[i] != secondArr[i])
  112.                 {
  113.                     areEqual = false;
  114.                     break;
  115.                 }
  116.             }
  117.  
  118.             Console.WriteLine("The two arrays are equal: {0}", areEqual);
  119.  
  120. // sushtoto kato  to 2 zadacha samo che smenqme s charove  firstArr[i] = char.Parse(Console.ReadLine());
  121. //ОБЯСНЕНИЕ: решението е почти същото като на задача 2 от Масиви.
  122. //Разликата е че зададох char-овете предварително в самия код, защото не се сетих как може да се направи, така че потребителя сам самичък да си ги въведене...
  123.  
  124.  
  125.  
  126. Problem 4. Maximal sequence/////////////////////////////////////////////////////////////////
  127. //Write a program that finds the maximal sequence of equal elements in an array.
  128.  
  129.             Console.Write("Enter the length of the array: ");
  130.             int length = int.Parse(Console.ReadLine());
  131.             int[] arr = new int[length];
  132.  
  133.             Console.WriteLine("Enter {0} elements: ", length);
  134.             for (int index = 0; index < length; index++)
  135.             {
  136.                 arr[index] = int.Parse(Console.ReadLine());
  137.             }
  138.  
  139.             int counter = 0;
  140.             int longestSequence = 0;
  141.             int value = 0;
  142.             for (int index = 0; index < length - 1; index++)
  143.             {
  144.                 if (arr[index] == arr[index + 1])
  145.                 {
  146.                     counter++;
  147.                     if (longestSequence < counter)
  148.                     {
  149.                         longestSequence = counter;
  150.                         for (int i = 0; i < longestSequence; i++)
  151.                         {
  152.                             value = + arr[index];
  153.                            
  154.                             Console.Write("{0},", value.ToString().Trim());
  155.                         }
  156.                        
  157.                     }
  158.                 }
  159.                 else
  160.                 {
  161.                     counter = 0;
  162.                 }
  163.             }
  164.            
  165. //ОБЯСНЕНИЕ: Заделяме масив и го инициализираме. Създаваме три нови променливи: counter, longestSequence и value.
  166. //В първата ще записваме текущото проверявано повторение от числа, във втората ще записваме най-гоямото повтореине от числа и в последната (value) ще запишем елемента, който съзава най-дългата поредица.
  167. //С for цикъла сравняваме числата позиция по позиция. Ако намерим две еднакви се изпълнява if условието, в което са събрани трите променливи.
  168. //Накрая яко longestSequence е различно от 0 т.е. ако сме открили някаква повтаряща се поредица, изписваме колко е голяма тя на конзолата.
  169.  
  170.  
  171.  
  172.  
  173. Problem 5. Maximal increasing sequence/////////////////////////////////////////////////////
  174.  
  175.   //Write a program that finds the maximal increasing sequence in an array.
  176.  
  177.             Console.Write("Enter the length of the array: ");
  178.             int length = int.Parse(Console.ReadLine());
  179.             int[] array = new int[length];
  180.  
  181.             Console.WriteLine("Enter {0} elements: ", length);
  182.             for (int index = 0; index < length; index++)
  183.             {
  184.                 array[index] = int.Parse(Console.ReadLine());
  185.             }
  186.  
  187.             int maxSequence = 0;
  188.             int sequence = 1;
  189.             string sequenceNumbers = "";
  190.             string maxSequenceNumbers = "";
  191.             for (int i = 0; i < array.Length - 1; i++)
  192.             {
  193.  
  194.                 if (array[i + 1] - array[i] == 1)
  195.                 {
  196.                     sequence++;
  197.                     sequenceNumbers += array[i] + " ";
  198.                 }
  199.                 else
  200.                 {
  201.                     if (maxSequence < sequence)
  202.                     {
  203.                         maxSequence = sequence;
  204.                         sequenceNumbers += array[i] + " ";
  205.                         maxSequenceNumbers = sequenceNumbers;
  206.                     }
  207.                     sequence = 1;
  208.                     sequenceNumbers = "";
  209.                 }
  210.             }
  211.  
  212.             if (maxSequence < sequence)
  213.             {
  214.                 sequenceNumbers += array[array.Length - 1];
  215.                 maxSequenceNumbers = sequenceNumbers;
  216.             }
  217.  
  218.             Console.WriteLine("The maximal increasing sequence in an array is: ");
  219.             Console.WriteLine(maxSequenceNumbers);
  220.  
  221.  
  222.  
  223. //ОБЯСНЕНИЕ: Създаваме си масив от някакви числа, които въвеждаме ръчно от конзолата. Създаваме си първоначално 4 променливи.
  224. //В maxSequence ще отброяваме броя на нарастващите последователности, ако може така да се каже. Примерно ако имаме поредица от числата 1,2,5,1 в тази променлива ще се запише 3.
  225. //В sequence променливата ще записваме броя на моментните повторения, които цикълът е открил.
  226. //В sequenceNumbers ще се записват самите числа, които в момента цикъла проверява.
  227. //В maxSequenceNumbers ще се съдържа максималната, най-голямата последователност от нанрастващи числа, която е открита до момента.
  228. //Пускаме един нормален for цикъл, с който да срявняваме числата в поредицата, като в зависимост от това дали числото е по-малко или по-голямо от следващото сравнявано в редицата се изпълнява едно от if условията.
  229. //Когато програмата премине през скобите със самите if условия, "зачистваме"  sequence и sequenceNumbers променливите, съответно с числото 1 и "". След което останалато е лесно - програмата се връща отново горе във for цикъла,
  230. //минава и сравнява останалите числа по редицата и накрая прогрмата принтира резултата
  231.  
  232.  
  233. Problem 6. Maximal K sum //////////////////////////////////////////////////////////
  234.  
  235.  
  236. //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.
  237.  
  238.  
  239.         Console.Write("Enter N: ");
  240.         int n = int.Parse(Console.ReadLine());
  241.         int[] myArray = new int[n];
  242.         for (int i = 0; i < n; i++)
  243.         {
  244.             Console.Write("Enter array element {0}: ", i);
  245.             myArray[i] = int.Parse(Console.ReadLine());
  246.         }
  247.  
  248.         Console.Write("Enter K: ");
  249.         int k = int.Parse(Console.ReadLine());
  250.  
  251.         string bestSeq = "";
  252.         int sum = 0;
  253.         int bestSum = int.MinValue;
  254.         int arrayLen = myArray.Length;
  255.         for (int i = 0; i < arrayLen; i++)
  256.         {
  257.             string currentSeq = "";
  258.  
  259.             if (i + k > arrayLen)
  260.             {
  261.                 break;
  262.             }
  263.  
  264.             for (int j = i; j < i + k; j++)
  265.             {
  266.                 sum = sum + myArray[j];
  267.                 currentSeq = currentSeq + ' ' + myArray[j];
  268.             }
  269.  
  270.             if (sum > bestSum)
  271.             {
  272.                 bestSeq = currentSeq;
  273.                 bestSum = sum;
  274.             }
  275.             sum = 0;
  276.         }
  277.         Console.WriteLine(bestSeq);
  278.         Console.WriteLine(bestSum);
  279.  
  280.     }
  281. }
  282.  
  283. //ОБЯСНЕНИЕ: Решението е подобно като на задача 5. Особеното е че с if условие се прави проверка i + k > arrayLen, дали случайно не сме излезнали от рамките на масива.
  284. //След това за всяка "заградена" съвкупност от i+k индекси до края на масива правим сравнеиня на самите суми и намираме, коя е най-голямата.
  285.  
  286.  
  287. 7 e mn lesna ////
  288.  
  289.  
  290. Problem 8. Maximal sum  /////////////////////////////////////////////////////////////
  291.  
  292.  
  293.  //Write a program that finds the sequence of maximal sum in given array. Can you do it with only one loop (with single scan through the elements of the array)?
  294.             //Example: {2, 3, -6, -1, 2, -1, 6, 4, -8, 8}  ->  {2, -1, 6, 4}
  295.  
  296.  
  297.             int[] array = { 2, 3, -6, -1, 2, -1, 6, 4, -8, 8 };
  298.  
  299.             int currentSum = array[0];
  300.             int startIndex = 0;
  301.             int endIndex = 0;
  302.             int tempStartIndex = 0;
  303.             int maxSum = array[0];
  304.  
  305.             for (int i = 1; i < array.Length; i++)
  306.             {
  307.                 if (currentSum < 0)
  308.                 {
  309.                     currentSum = array[i];
  310.                     tempStartIndex = i;
  311.                 }
  312.                 else
  313.                 {
  314.                     currentSum += array[i];
  315.                 }
  316.                 if (currentSum > maxSum)
  317.                 {
  318.                     maxSum = currentSum;
  319.  
  320.                     startIndex = tempStartIndex;
  321.                     endIndex = i;
  322.                 }
  323.             }
  324.  
  325.             Console.WriteLine("The best sum is: {0} ", maxSum);
  326.  
  327.             Console.WriteLine("The best sequence is:");
  328.  
  329.             for (int i = startIndex; i <= endIndex; i++)
  330.             {
  331.                 Console.WriteLine(array[i]);
  332.             }
  333.  
  334.  
  335. *
  336. ОБЯСНЕНИЕ: За решението на тази задача трябва да се използва алгоритъма на Кадан - http://en.wikipedia.org/wiki/Kadane%27s_algorithm
  337. Инициализираме си масив. Създаваме си 5-те основни променливи, които ще използваме в алгоритъма на Кадан. След това принтираме резултата на конзолата.
  338. */
  339.  
  340.  
  341. Problem 9. Frequent number /////////////////////////////////////////////
  342.  
  343. //Write a program that finds the most frequent number in an array
  344.  
  345.             Console.Write("Enter length of the array: ");
  346.             int length = int.Parse(Console.ReadLine());
  347.  
  348.             int[] array1 = new int[length];
  349.             for (int i = 0; i < length; i++)
  350.             {
  351.                 Console.Write("Element[{0}]=", i);
  352.                 array1[i] = int.Parse(Console.ReadLine());
  353.             }
  354.  
  355.             for (int i = 0; i < array1.Length - 1; i++)
  356.             {
  357.                 for (int j = i + 1; j < array1.Length; j++)
  358.                 {
  359.                     if (array1[i] >= array1[j])
  360.                     {
  361.                         int a = array1[i];
  362.                         array1[i] = array1[j];
  363.                         array1[j] = a;
  364.                     }
  365.                 }
  366.             }
  367.             int counter = 0;
  368.             int bigCounter = 0;
  369.             int whatNum = 0;
  370.             for (int i = 0; i < array1.Length - 1; i++)
  371.             {
  372.                 if (array1[i] == array1[i + 1])
  373.                 {
  374.                     counter++;
  375.                     if (bigCounter <= counter)
  376.                     {
  377.                         bigCounter = counter;
  378.                         whatNum = array1[i];
  379.                     }
  380.                 }
  381.                 else
  382.                 {
  383.                     counter = 0;
  384.                 }
  385.             }
  386.             Console.WriteLine("We have {0} members of the number \"{1}\" in the array", bigCounter + 1, whatNum);
  387.         }
  388.     }
  389. }
  390.  
  391.     //ОБЯСНЕНИЕ: С първите два for цикъла първо подреждаме самия масив от числа във възходящ ред. Стандартен алгоритъм за сортиране си е това, нищо сложно.
  392.     //След което правим класическите три променливи, в които да отброяваме: броя на повторенията към момента, най-голямото повтериение и самото число, което е с най-голямото повторение.
  393.     //Пускаме трети for цикъл, с който започваме да с сравняваме един по един елементите по елементите из масива и съответно ако има еднакви числа в поредица едно до друго if и else конструкцията в кода се грижат за това накрая конзолата да ни ги изпечата правилното решение на задачата.
  394.  
  395.  
  396. Problem 10. Find sum in array //////////////////////////////////////////////////////////////////////////////
  397.  
  398.  
  399. //Write a program that finds in given array of integers a sequence of given sum S (if present).
  400.             //Example:   {4, 3, 1, 4, 2, 5, 8}, S=11  {4, 2, 5} 
  401.  
  402.             int[] array = { 4, 3, 1, 4, 2, 5, 8 };
  403.  
  404.             Console.WriteLine("Enter sumS:");
  405.             int sumS = int.Parse(Console.ReadLine());
  406.             int currentSum = array[0];
  407.  
  408.             int startIndex = 0;
  409.             int endIndex = 0;
  410.             int CurrSum = 0;
  411.             for (int i = 0; i < array.Length - 1; i++)
  412.             {
  413.                 CurrSum += array[i];
  414.                 startIndex = i;
  415.                 for (int p = i + 1; p < array.Length; p++)
  416.                 {
  417.                     CurrSum += array[p];
  418.                     endIndex = p;
  419.                     if (CurrSum == sumS)
  420.                     {
  421.                         for (int k = startIndex; k <= endIndex; k++)
  422.                         {
  423.                             Console.Write("{0}",array[k]);
  424.                         }
  425.                         return;
  426.                     }
  427.                 }
  428.                 CurrSum = 0;
  429.             }
  430.             Console.WriteLine("The sumS is not present in the array.");
  431.  
  432.  
  433.  
  434. /*
  435. ОБЯСНЕНИЕ: Тук търсим в масив последователна поредица от числа, чиято сума да е равна на числото S. Правим си три променливи по подобие на 8-ма задача: startIndex, endIndex, CurrSum.
  436. С два for цикъла обхождаме масива събирайки отляво-надясно елементите му. В момента, в който открием елементи, чиято сума да удовлетворява if условието (а именно - временната CurrSum да бъде равна на sumS)
  437. влизаме в третия for цикъл, който ни отпечатва индексите (startIndex e нейното начало, а endIndex нейния край) на търсената поредица от числа. Ако не намерим такава поредица от елементи - изписваме, че в масива няма такава поредица.
  438. */
  439.  
  440. Problem 11. Binary search/////////////////////////////////////////////////////////////
  441.  
  442.  
  443. static int BinSearch(int[] array, int key)
  444.     {
  445.         Array.Sort(array);
  446.         int iMax = array.Length - 1;
  447.         int iMin = 0;
  448.         while (iMax >= iMin)
  449.         {
  450.             int iMidpoint = (iMin + iMax) / 2;
  451.             if (array[iMidpoint] < key)
  452.             {
  453.                 iMin = iMidpoint + 1;
  454.             }
  455.             else if (array[iMidpoint] > key)
  456.             {
  457.                 iMax = iMidpoint - 1;
  458.             }
  459.             else
  460.             {
  461.                 return iMidpoint;
  462.             }
  463.         }
  464.         return -1;
  465.     }
  466.  
  467.     static void Main()
  468.     {
  469.         int[] myArray = { 4, 7, 4, 6, 2, 7, 5, 12, 22, 13, };
  470.         int key = 7;
  471.         Console.WriteLine(BinSearch(myArray, key));
  472.     }
  473. }
  474.  
  475. //ОПИСАНИЕ: Задача имаща за цел да ни запознае с един от основните алгоритми в програмирането - Binary Search. Повече инфо за него тук - http://en.wikibooks.org/wiki/Algorithm_Implementation/Search/Binary_search
  476.  
  477.  
  478. Problem 12. Index of letters /////////////////////////////////////////////////////////////
  479.  
  480.  //initialize alphabet array
  481.         char[] alphabet = new char[26];
  482.         int first = (int)'A';
  483.         for (int i = 0; i < 26; i++)
  484.         {
  485.             alphabet[i] = (char)(first + i);
  486.         }
  487.  
  488.         Console.Write("Enter word (A-Z): ");
  489.         string word = Console.ReadLine();
  490.         int ih = 91;
  491.         foreach (char item in word)
  492.         {
  493.             int ssh = item - '@';
  494.             Console.WriteLine(ssh);
  495.         }
  496.  
  497.  
  498.  
  499. Problem 15. Prime numbers /////////////////////////////////////////////////
  500.  
  501. class PrintNumberUsingSieveOfEratosthenes
  502. {
  503.     static List<int> SieveLINQ(int upTo)
  504.     {
  505.         int index = 1;
  506.         List<int> result = Enumerable.Range(2, upTo - 2).ToList();
  507.  
  508.         while (index <= Math.Sqrt(upTo))
  509.         {
  510.             index = result.First(i => i > index);
  511.             result.RemoveAll(i => i != index && i % index == 0);
  512.         }
  513.         return result;
  514.     }
  515.     static void Sieve(int upTo)
  516.     {
  517.         bool[] notPrime = new bool[upTo];
  518.         notPrime[0] = notPrime[1] = true;
  519.         for (int i = 2; i < Math.Sqrt(notPrime.Length); i++)
  520.         {
  521.             if (!notPrime[i])
  522.             {
  523.                 for (int j = i * 2; j < notPrime.Length; j += i)
  524.                 {
  525.                     notPrime[j] = true;
  526.                 }
  527.             }
  528.         }
  529.         //Print(notPrime);
  530.     }
  531.     static void Print(bool[] arr)
  532.     {
  533.         for (int i = 0; i < arr.Length; i++)
  534.         {
  535.             if (arr[i] == false)
  536.             {
  537.                 Console.Write(i + " ");
  538.             }
  539.         }
  540.     }
  541.     static void Main()
  542.     {
  543.         DateTime first = DateTime.Now;
  544.         Sieve(10000000);
  545.         TimeSpan normalSieveTime = DateTime.Now - first;
  546.         DateTime second = DateTime.Now;
  547.         List<int> linqResult = SieveLINQ(10000000);
  548.         TimeSpan linqSieveTime = DateTime.Now - second;
  549.  
  550.         Console.WriteLine("Sieve with LINQ: {0}", linqSieveTime);
  551.         Console.WriteLine("Sieve with bool: {0}", normalSieveTime);
  552.     }
  553. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement