C# – Loops

Условия и решения на задачите от лекция “Loops”

Задача 1. Print N Numbers

Условие: Write a program that prints all the numbers from 1 to N.

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _1.PrintNNumbers
{
    class PrintNNumbers
    {
        static void Main()
        {
            int n;
            Console.Write("Enter an integer number:");
            bool isnInt = int.TryParse(Console.ReadLine(), out n);
            if (isnInt)
            {
                for (int i = 1; i <= n; i++)
                {
                    Console.WriteLine(i);
                }
            }
            else
            {
                Console.WriteLine("Not a valid entry!");
            }
        }
    }
}

Задача 2. Print N Number Non Divisible By 3 And 7

Условие: Write a program that prints all the numbers from 1 to N, that are not divisible by 3 and 7 at the same time.

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _2.PrintNNumberNonDivisibleBy3And7
{
    class PrintNNumberNonDivisibleBy3And7
    {
        static void Main()
        {
            int n;
            Console.Write("Enter an integer number:");
            bool isnInt = int.TryParse(Console.ReadLine(), out n);
            if (isnInt)
            {
                for (int i = 1; i <= n; i++)
                {
                    if (((i % 3) != 0) || ((i % 7) != 0))
                    {
                        Console.WriteLine(i);
                    }
                }
            }
            else
            {
                Console.WriteLine("Not a valid entry!");
            }
        }
    }
}

Задача 3. Find Min And Maximal Number

Условие: Write a program that reads from the console a sequence of N integer numbers and returns the minimal and maximal of them.

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _3.FindMinAndMaximalNumber
{
    class FindMinAndMaximalNumber
    {
        static void Main()
        {
            int n;
            string[] numbers;
            bool isInteger=true;
            int minimal=int.MaxValue;
            int maximal=int.MinValue;
            Console.Write("Enter a sequence of numbers delimited with \",\":");
            numbers = (Console.ReadLine()).Split(',');
            int[] intNumbers=new int[numbers.Length];
            for (int i = 0; i < (numbers.Length); i++)
            {
                isInteger = int.TryParse(numbers[i], out intNumbers[i]);
                if (isInteger==false)
                {
                    break;
                }
            }
            if (isInteger)
            {
                for (int i = 0; i < numbers.Length; i++)
                {
                    if (intNumbers[i] < minimal)
                    {
                        minimal = intNumbers[i];
                    }
                    if (intNumbers[i] > maximal)
                    {
                        maximal = intNumbers[i];
                    }
                }
                Console.WriteLine("minimal={0}",minimal);
                Console.WriteLine("maximal={0}",maximal);
            }
            else
            {
                Console.WriteLine("Not a valid entry! Some of the entries are not integer!");
            }
        }
    }
}

Задача 4. Devision Of Factorials

Условие: Write a program that calculates N!/K! for given N and K (1Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _4.DevisionOfFactorials
{
    class DevisionOfFactorials
    {
        static void Main()
        {
            int N, K;
            int divisor=1;
            double result;
            Console.Write("Enter the first number N:");
            bool isNInt = int.TryParse(Console.ReadLine(), out N);
            Console.Write("Enter the second number K:");
            bool isKInt = int.TryParse(Console.ReadLine(), out K);
            if (isNInt && isKInt && (N < K) && (N > 1) && (K > 1))
            {             
                for (int i=N+1; i < K + 1; i++)
                {
                    divisor = divisor * i;
                }

                result = 1.0/(double)divisor;
                Console.WriteLine("result={0}",result);
            }
            else 
            {
                Console.WriteLine("Not a valid entry!");
            }
        }
    }
}

Задача 5. Factorial Calculations

Условие: Write a program that calculates N!*K! / (K-N)! for given N and K (1Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;


namespace _5.FactorialCalculations
{
    class FactorialCalculations
    {
        static void Main()
        {
            int N, K;
            BigInteger result=1;
            Console.Write("Enter the first number N:");
            bool isNInt = int.TryParse(Console.ReadLine(), out N);
            Console.Write("Enter the second number K:");
            bool isKInt = int.TryParse(Console.ReadLine(), out K);
            if (isNInt && isKInt && (N < K) && (N > 1) && (K > 1))
            {
                for (int i = 1; i < K + 1; i++)
                {
                    if (N > (K - N))
                    {
                        result = result * i;
                        if (i < (N + 1))
                        {
                            result = result * i;
                        }
                    }
                    else if (N < (K - N))
                    {
                        if(i<=N)
                        {
                            result = result * i;
                        }
                        if(i>(K-N))
                        {
                            result = result * i;
                        }
                    }
                    else//N=K-N
                    {
                        result = result * i;
                    }
                }
                Console.WriteLine("result={0}", result);
            }
            else
            {
                Console.WriteLine("Not a valid entry!");
            }
        }
    }
}

Задача 6. Sum Calculation

Условие: Write a program that, for a given two integer numbers N and X, calculates the sum S = 1 + 1!/X + 2!/X2 + … + N!/XN

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;

namespace _6.SumCalculation
{
    class SumCalculation
    {
        private static BigInteger FindFactorial(int N)
        {
            BigInteger factorial=1;
            for (int i = 1; i < N+1; i++)
            {
                factorial = factorial * i;
            }
            return factorial;
        }

        private static BigInteger FindPower(int X,int N)
        {
            BigInteger powerX=1;
            for (int i = 1; i < N + 1; i++)
            {
                powerX = powerX *X;
            }
            return powerX;
        }

        static void Main()
        {
            int N, X;
            double sum=1.0;
            Console.Write("Enter the first number N:");
            bool isNInt = int.TryParse(Console.ReadLine(), out N);
            Console.Write("Enter the second number X:");
            bool isXInt = int.TryParse(Console.ReadLine(), out X);
            if (isNInt && isXInt)
            {
                for (int i = 1; i < N+1; i++)
                {
                    sum = sum + ((double)FindFactorial(i) / (double)FindPower(X, i));

                }
                Console.WriteLine("sum={0}", sum);
            }
            else
            {
                Console.WriteLine("Not a valid entry!");
            }
        }
    }
}

Задача 7. Fibonacci Sequence

Условие: Write a program that reads a number N and calculates the sum of the first N members of the sequence of Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, …
Each member of the Fibonacci sequence (except the first two) is a sum of the previous two members.

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;

namespace _7.FibonacciSequence
{
    class FibonacciSequence
    {
        static void Main()
        {
            int N;
            BigInteger sum = 1;
            BigInteger newElement;
            BigInteger[] sequenceMembers = { 0, 1 };
            Console.Write("Enter the number N:");
            bool isNInt = int.TryParse(Console.ReadLine(), out N);
            if (isNInt)
            {
                for (int i = 0; i < N-2; i++)
                {
                    newElement = sequenceMembers[0] + sequenceMembers[1];
                    sum = sum + newElement;
                    sequenceMembers[0] = sequenceMembers[1];
                    sequenceMembers[1] = newElement;
                }
                Console.WriteLine("sum={0}",sum);
            }
        }
    }
}

Задача 8. Greatest Common Devider

Условие: Write a program that calculates the greatest common divisor (GCD) of given two numbers. Use the Euclidean algorithm (find it in Internet).

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _8.GreatestCommonDevider
{
    class GreatestCommonDevider
    {
        static void Main()
        {
            uint N, K, temporary, remaining;
            uint greatestCommonDevider=1;
            Console.Write("Enter the first number N:");
            bool isNUint = uint.TryParse(Console.ReadLine(), out N);
            Console.Write("Enter the second number K:");
            bool isKUint = uint.TryParse(Console.ReadLine(), out K);

            if (isNUint && isKUint && (N != 0 || K != 0))
            {
                if (N == 0)
                {
                    greatestCommonDevider = K;
                }
                else if (K == 0)
                {
                    greatestCommonDevider = N;
                }
                else
                {
                    temporary = Math.Max(N, K);
                    K = Math.Min(N, K);
                    N = temporary;
                    do
                    {
                        remaining = N % K;
                        if (remaining == 0)
                        {
                            greatestCommonDevider = K;
                            break;
                        }
                        else
                        {
                            N = K;
                            K = remaining;
                        }
                    } while (true);
                }
                Console.WriteLine("Greatest common devider = {0}",greatestCommonDevider);
            }
            else 
            {
                Console.WriteLine("Not a valid entry!");
            }
        }
    }
}

Задача 10. Catalan Numbers

Условие: Write a program to calculate the Nth Catalan number by given N.

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;

namespace _10.CatalanNumbers
{
    class CatalanNumbers
    {
        private static BigInteger FindPartialFactorial(uint startNumber,uint N)
        {
            BigInteger factorial = (BigInteger)startNumber;
            for (uint i = startNumber+1; i < N+1; i++)
            {
                factorial = factorial * i;
            }
            return factorial;
        }
        static void Main()
        {
            BigInteger Nth_element;
            uint N;
            Console.Write("Enter the number N:");
            bool isNUint = uint.TryParse(Console.ReadLine(), out N);
            if (isNUint)
            {
                Nth_element = FindPartialFactorial((N + 1), (2 * N)) / FindPartialFactorial(1, N + 1);
                Console.WriteLine("The Nth element={0}",Nth_element);
            }
            else
            {
                Console.WriteLine("Wrong entry!");
            }
        }
    }
}

Задача 11. Print Card Names

Условие: Write a program that prints all possible cards from a standard deck of 52 cards (without jokers). The cards should be printed with their English names. Use nested for loops and switch-case.

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _11.PrintCardNames
{
    class PrintCardNames
    {
        static void Main()
        {
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 13; j++)
                {
                    switch (j)
                    {
                        case 0: Console.Write("Ace"); break;
                        case 1: Console.Write("Two"); break;
                        case 2: Console.Write("Three"); break;
                        case 3: Console.Write("Four"); break;
                        case 4: Console.Write("Five"); break;
                        case 5: Console.Write("Six"); break;
                        case 6: Console.Write("Seven"); break;
                        case 7: Console.Write("Eight"); break;
                        case 8: Console.Write("Nine"); break;
                        case 9: Console.Write("Ten"); break;
                        case 10: Console.Write("Jack"); break;
                        case 11: Console.Write("Queen"); break;
                        case 12: Console.Write("King"); break;
                    }
                    switch (i)
                    {
                        case 0: Console.WriteLine(" Of Clubs"); break;
                        case 1: Console.WriteLine(" Of Diamonds"); break;
                        case 2: Console.WriteLine(" Of Hearts"); break;
                        case 3: Console.WriteLine(" Of Spades"); break;
                    }

                }
            }
        }
    }
}

Задача 12. Print Matrix

Условие: Write a program that reads from the console a positive integer number N (N < 20) and outputs a matrix like the following: N = 3 Loops_1

N = 4
Loops_2

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _12.PrintMatrix
{
    class PrintMatrix
    {
        static void Main()
        {
            int N;
            Console.Write("Enter an integer number < 20:");
            bool isnInt = int.TryParse(Console.ReadLine(), out N);
            if (isnInt&N<20&N>0)
            {
                for (int i = 0; i < N; i++)
                {
                    for (int j = 1; j < N+1; j++)
                    {
                        if (j + i > 9)
                        {
                            Console.Write("{0} ", j + i);
                        }
                        else
                        {
                            Console.Write("{0}  ", j + i);
                        }
                    }
                    Console.WriteLine();
                }
                
            }
            else 
            {
                Console.WriteLine("Wrong entry!");
            }
        }
    }
}

Задача 13. Find Zeroes At The End Of The Factorial

Условие: Write a program that calculates for given N how many trailing zeros present at the end of the number N!. Examples:
N = 10 => N! = 3628800 => 2
N = 20 => N! = 2432902008176640000 => 4
Does your program work for N = 50 000?
Hint: The trailing zeros in N! are equal to the number of its prime divisors of value 5. Think why!

Решение:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;

namespace _13.FindZeroesAtTheEndOfTheFactorial
{
    class FindZeroesAtTheEndOfTheFactorial
    {
        static void Main()
        {
            int N,temporary;
            int numberOfZeroes=0;
            BigInteger factorial = 1;
            Console.Write("Enter an integer number:");
            bool isnInt = int.TryParse(Console.ReadLine(), out N);
            if (isnInt)
            {
                for (int i = 1; i < N+1; i++)
                {
                    factorial = factorial * i;
                }
                Console.WriteLine("N factorial={0}",factorial);
                if(N>=5)
                {
                    do
                    {
                        temporary = N / 5;
                        if (temporary != 0)
                        {
                            numberOfZeroes = numberOfZeroes + temporary;
                            N = temporary;
                        }
                        else 
                        {
                            break;
                        }
                    }
                    while(true);   
                }
                Console.WriteLine("Number of zeroes =:{0}",numberOfZeroes);
            }
            else
            {
                Console.WriteLine("Wrong entry!");
    
            }
        }
    }
}

Задача 14. Print Matrix In Spiral

Условие: Write a program that reads a positive integer number N (N < 20) from console and outputs in the console the numbers 1 ... N numbers arranged as a spiral. Example for N = 4 Loops_3

Решение:

using System;

namespace _14.PrintMatrixInSpiral
{
    class PrintMatrixInSpiral
    {
        static void Main()
        {
            int N;
            int counter = 0;
            int numberOfDoubleSections; //How many Row/Column sections has the spiral
            int spiralSectionLength; //Length of the spiral section ( row or column section)
            byte column=0;
            byte row=0;
            Console.Write("Enter an integer number < 20:");
            bool isnInt = int.TryParse(Console.ReadLine(), out N);
            if (isnInt & N < 20 & N > 0)
            {
                int[,] array = new int[N, N];
                for (column = 0; column < N; column++)//Fill the first row
                {
                    counter++;
                    array[row, column] = counter;
                }
                column--;
                numberOfDoubleSections = N - 1;
                spiralSectionLength= N - 1;
                counter++;
                for (int section = 0; section < numberOfDoubleSections; section++)
                {
                    for (int j = 0; j < 2; j++)
                    {
                        for (int i = 0; i < spiralSectionLength; i++)
                        {
                            if (j == 1)//Row printing
                            {
                                if (section % 2 == 0)// isLeftDirection
                                {
                                    column--;
                                    array[row, column] = counter;
                                }
                                else
                                {
                                    column++;
                                    array[row, column] = counter;
                                }
                            }
                            else //Column printing 
                            {
                                if (section % 2 == 0)// isDownDirection
                                {
                                    row++;
                                    array[row, column] = counter;
                                }
                                else
                                {
                                    row--;
                                    array[row, column] = counter;
                                }
                            }
                            counter++;
                        }
                    }
                   spiralSectionLength--;
                }

                for (row = 0; row < N; row++)
                {
                    for (column = 0; column < N; column++)
                    {
                        Console.Write("{0,4}",array[row,column]);
                    }
                    Console.WriteLine();
                }
            }
            else
            {
                Console.WriteLine("Wrong entry!");
            }
        }
    }
}

Оставете коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *