C# 0707

练习 1: 数组元素求和

题目 : 编写一个C#程序,计算数组中所有元素的总和。

namespace Djproject
{
    internal class ArraySum
    {
        public static int SumArray(int[] arr)
        {
            int sum = 0;
            // 初始化总和为0  
            foreach (int num in arr)
            // 遍历数组中的每个元素  
            {
                sum += num;
                // 将当前元素的值加到总和上  
            }
            return sum;
            // 返回总和  
        }

        public static void Main()
        {
            int[] numbers = { 1, 2, 3, 4, 5 };
            Console.WriteLine(SumArray(numbers)); // 应输出 15  
        }
    }
}
ArraySum.Main();

结果:

练习2: 数组元素乘积

题目 : 编写一个C#程序,计算数组中所有元素的乘积。

namespace Djproject
{
    internal class ArrayProduct
    {
        public static long ProductArray(int[] arr)
        {
            int product = 1;
            // 初始化总和为1  
            foreach (int num in arr)
            // 遍历数组中的每个元素  
            {
                product *= num;
                // 将当前元素的值乘到总和上  
            }
            return product;
            // 返回总和  
        }
        public static void Main()
        {
            int[] numbers = { 1, 2, 3, 4, 5 };
            Console.WriteLine(ProductArray(numbers)); //应输出 120 
         }
    }
}
ArrayProduct.Main();

结果:

 

练习3: 数组元素平均值

题目 : 编写一个C#程序,计算数组中所有元素的平均值

namespace Djproject
{
    internal class ArrayAverage
    {
        public static double AverageArray(int[] arr)
        {
            int sum = 0;
            // 初始化总和为0  
            foreach (int num in arr)
            // 遍历数组中的每个元素  
            {
                sum += num;
                // 将当前元素的值加到总和上  
            }
            return sum / arr.Length;
        }
        public static void Main()
        {
            int[] numbers = { 1, 2, 3, 4, 5 };
            Console.WriteLine(AverageArray(numbers));
        }
    }
}
ArrayAverage.Main();

结果:

练习4: 查找数组中的最大值

题目 : 编写一个C#程序,找到数组中的最大值。

namespace Djproject
{
    internal class ArrayMax
    {
        public static int MaxValue(int[] arr)
        {
           int max = 0;
            foreach (int i in arr)
            {
                if (i > max)
                {
                    max = i;
                }
            }
            return max;
}
        public static void Main()
        {
            int[] numbers = { 1, 2, 3, 4, 5 };
            Console.WriteLine(MaxValue(numbers)); 
        }
    }
}
ArrayMax.Main();

结果:

练习 5: 查找数组中的偶数

题目 : 编写一个C#程序,从数组中筛选出所有的偶数,并返回一个新的数组。

namespace Djproject
{
    internal class EvenNumbers
    {

        public static List<int> GetEvens(int[] arr)
        {
            List<int> NewList = new List<int>();
            foreach (int i in arr)
            {
                if (i % 2 == 0)
                {
                    NewList.Add(i);
                }
            }
            return NewList;
         }
        public static void Main()
        {
            int[] numbers = { 1, 2, 3, 4, 5, 6 };
            List<int> evenNumbers = GetEvens(numbers); 
            foreach (int num in evenNumbers)
            {
                Console.Write(num + "  ");
            }
            
        }
    }
}

结果:

练习6: 计算阶乘

题目 : 编写一个C#函数,计算给定非负整数的阶乘。

namespace Djproject
{
    internal class Factorial
    {
        public static long CalculateFactorial(int number)
        {
            long factorial = 1;
            for (int i = 1; i <= number; i++)
            {
                factorial *= i;
            }
            return factorial;
        }

        public static void Main()
        {
            Console.WriteLine(CalculateFactorial(5));
        }
    }
}

结果:

 

练习7: 数组翻转

题目 : 编写一个C#程序,将一个整数数组翻转。

Array.Reverse(arr)这个方法接受一个数组作为参数,并就地翻转该数组的元素顺序,而不需要创建新数组或返回任何值(因为它是void类型的)。

namespace Djproject
{
    internal class ArrayReverse
    {
        public static void ReverseArray(int[] arr)
        {
            Array.Reverse(arr);
        }
        public static void Main()
        {
            int[] array = { 1, 2, 3, 4, 5 }; 
            ReverseArray(array);
            foreach (int i in array)
            {
                Console.Write(i + "  ");
            }
        }   
    }
}

结果:

练习8: 字符串反转

题目 : 编写一个C#函数,反转一个字符串。

namespace Djproject
{
    internal class StringReversal
    {
        public static string ReverseString(string str)
        {
            char[] charArray = str.ToCharArray(); // 将字符串转换为字符数组  
            Array.Reverse(charArray); // 使用Array.Reverse反转数组  
            return new string(charArray); // 将反转后的字符数组转换回字符串并返回  
        }
        public static void Main()
        {
            Console.WriteLine(ReverseString("hello")); }
    }
}

结果:

练习9: 检查回文

题目 : 编写一个C#函数,检查一个字符串是否是回文。

string cleanStr = new string(str.Where(char.IsLetterOrDigit).ToArray()).ToLower();

   string cleanStr =:定义了一个新的字符串变量cleanedStr,这个变量将会存储清洗后的字符串。

         new string(str.Where(char.IsLetterOrDigit).ToArray())

    str 是原始的字符串变量。

    Where(char.IsLetterOrDigit) 是 LINQ 查询,它遍历字符串str中的每个字符,并使用char.IsLetterOrDigit方法判断每个字符是否是字母或数字。这个方法返回一个布尔值truefalseWhere方法根据这个布尔值选择字符。

     ToArray() 将筛选出的字符转换为一个字符数组。

     new string(...) 构造函数,它接受一个字符数组并创建一个新的字符串,这个新字符串只包含原始字符串中的字母和数字字符。

   ToLower():将新字符串中的所有字符转换为小写。在英语中,这意味着大写字母会被转换成小写字母。

namespace Djproject
{
    internal class PalindromeChecker
    {
        public static bool IsPalindrome(string str)
        {
            // 首先,去除字符串中的所有非字母数字字符,并将所有字符转换为小写(或大写)  
            // 以确保比较时忽略大小写和非字母数字字符  
            string cleanStr = new string(str.Where(char.IsLetterOrDigit).ToArray()).ToLower();

            // 使用两个索引,一个从字符串的开头开始,另一个从末尾开始
            int left = 0;
            int right = cleanStr.Length - 1;

            // 当左索引小于右索引时,比较字符  
            while (left < right)
            {
                // 如果字符不匹配,则字符串不是回文 ,返回false
                if (cleanStr[left] != cleanStr[right])
                {
                    return false;
                }
                left++;
                right--;
            }
            return true;
        }
        public static void Main()
        {
            Console.WriteLine(IsPalindrome("racecar")); 
        }
    }
}

结果:

练习  : 数组中的最大值和最小值

题目 : 编写一个C#函数,找出数组中的最大值和最小值。

namespace Djproject
{
    internal class MaxMinFinder
    {
        public static Tuple<int, int> FindMaxMin(int[] arr)
        {
            int max = arr[0];
            int min = arr[0];
            for (int i = 1; i < arr.Length; i++)
            {
                if (arr[i] > max)
                {
                    max = arr[i];
                }
                if (arr[i] < min)
                {
                    min = arr[i];
                }
            }
            return Tuple.Create(max, min);
        }
        public  static void Main()
        {
            int[] array = { 3, 7, 1, 9, 2 }; 
            var result = FindMaxMin(array);
            Console.WriteLine($"Max :  {result.Item1} ,  Min :  {result.Item2}");
        }
    }
}

结果:

练习 11: 素数检查器

题目 : 编写一个C#函数,用于判断一个数字是否为素数。

namespace Djproject
{
    internal class PrimeChecker
    {
        public static bool IsPrime(int number)
        {
            // 小于2的数不是素数  
            if (number < 2)
            {
                return false;
            }

            // 检查从2到number的平方根之间的所有数  
            for (int i = 2; i*i <= number; i++)
            {
                if(number % i == 0)
                {
                    return false;
                }
            }
            // 如果没有找到能整除的数,则number是素数 
            return true;
        }
        public static void Main()
        {
            Console.WriteLine(IsPrime(17)); 
        }
    }
}

结果:

练习 12: 字符串中的最长无重复子串

题目 : 找到一个字符串中的最长无重复字符的子串长度。

namespace Djproject
{
    internal class LongestUniqueSubstring
    {
        public static int LengthOfLongestSubstring(string str)
        {
            if (string.IsNullOrEmpty(str)) return 0;

            int maxLength = 0;
            int left = 0;
            Dictionary<char, int> charIndexMap = new Dictionary<char, int>();

            for (int right = 0; right < str.Length; right++)
            {
                char c = str[right];

                // 如果字符已经存在于窗口中,则移动左边界到该字符上一次出现位置的下一个位置  
                if (charIndexMap.ContainsKey(c) && charIndexMap[c] >= left)
                {
                    left = charIndexMap[c] + 1;
                }

                // 更新字符最后出现的位置  
                charIndexMap[c] = right;

                // 计算当前窗口的长度,并更新最大长度  
                maxLength = Math.Max(maxLength, right - left + 1);
            }

            return maxLength;
        }
       public static void Main()
        {
            Console.WriteLine(LengthOfLongestSubstring("abcabcbb")); 
        }
    }
}

结果:

练习 13: 数字到字符串转换

题目 : 编写一个函数,将一个整数转换为其英文描述。

namespace Djproject
{
    internal class NumberToWords
    {
        public static string ConvertNumberToWords(int number)
        {
            string[] ones = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
            string[] tens = { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
            string[] teens = { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
            if (number == 0) return "Zero";

            if (number < 0) return "Negative " + ConvertNumberToWords(-number);

            if (number < 10) return ones[number];
            if (number < 20) return teens[number - 10];
            if (number < 100) return tens[number / 10] + (number % 10 > 0 ? " " + ones[number % 10] : "");
            if (number < 1000) return ConvertNumberToWords(number / 100) + " Hundred" + (number % 100 > 0 ? " " + ConvertNumberToWords(number % 100) : "");
            throw new ArgumentException("Number is too large.");
        }
        public static void Main()
        {
            Console.WriteLine(ConvertNumberToWords(15));
            
        }
    }
}

结果:

练习 14: 简单的日期格式化

题目 : 编写一个函数,将当前日期格式化为“Day Month Year”形式。

 

namespace Djproject
{
    internal class DateFormatter
    {
        public static string FormatDate()
        {
            DateTime now = DateTime.Now;
            return now.Day + " " + now.Month + "月" + now.Year;
        }
        public static void Main()
        {
            Console.WriteLine(FormatDate()); 
        }
    }
}

结果:

练习 15: 简单的计算器

题目 : 编写一个简单的计算器函数,支持加、减、乘、除四种基本运算。

namespace Djproject
{
    internal class SimpleCalculator
    {
        public static double Calculate(double num1, char op, double num2)
        {
            switch (op)
            {
                case '+':
                    return num1 + num2;
                case '-':
                    return num1 - num2;
                case '*':
                    return num1 * num2;
                case '/':
                    if (num2 == 0)
                    {
                        //当程序尝试进行除以零的操作时抛出
                        throw new DivideByZeroException("除数不能为0。");
                    }
                    return num1 / num2;
                default:
                    //查传入的操作符是否支持。如果不支持,它就会抛出一个包含错误信息的 ArgumentException
                    throw new ArgumentException("不支持的操作符:" + op);
            }
        }
        public static void Main()
        {
            Console.WriteLine(Calculate(10, '+', 5)); 
            Console.WriteLine(Calculate(10, '-', 5));
            Console.WriteLine(Calculate(10, '*', 5)); 
            Console.WriteLine(Calculate(10, '/', 5)); 
        }
    }
}

结果:

练习 16: 数组中的两数之和

题目 : 给定一个整数数组 nums  和一个目标值 target ,编写一个函数找到数组中和为目标值的两个整数的索 引。假设数组中的数据和一定能满足target,不用考虑不满足的情况。

 

namespace Djproject
{
    internal class TwoSum
    {
        public static Tuple<int, int> FindTwoSum(int[] nums, int target)
        {
            // 创建一个字典来存储元素和它们的索引  
            Dictionary<int, int> numberToIndex = new Dictionary<int, int>();

            for (int i = 0; i < nums.Length; i++)
            {
                // 计算差值  
                int complement = target - nums[i];

                // 检查差值是否已经在字典中  
                if (numberToIndex.ContainsKey(complement))
                {
                    // 如果在,就返回当前索引和差值对应的索引  
                    return Tuple.Create(numberToIndex[complement], i);
                }

                // 如果差值不在字典中,将当前元素和索引添加到字典中  
                numberToIndex[nums[i]] = i;
            }
            throw new InvalidOperationException("找不到答案");
        }
        public static void Main( )
        {
            int[] nums = { 2, 7, 11, 15 }; 
            int target = 9;
            var indices = FindTwoSum(nums, target);
            Console.WriteLine($"Indices :  {indices.Item1} ,  {indices.Item2}");
        }
    }
}

结果:

练习 17: 字符串去重

题目 : 编写一个函数,移除字符串中的重复字符,只保留第一个出现的字符。

namespace Djproject
{
    internal class UniqueChars
    {
        public static string RemoveDuplicates(string str)
        {
            HashSet<char> seen = new HashSet<char>();
            StringBuilder result = new StringBuilder();

            foreach (char c in str)
            {
                // 如果字符尚未被添加到集合中,则添加到结果字符串和集合中  
                if (seen.Add(c))
                {
                    result.Append(c);
                }
            }

            // 转换对象为字符串并返回  
            return result.ToString();
        }

        public static void Main()
        {
            string input = "hello  world ";
            Console.WriteLine(RemoveDuplicates(input));
        }
    }
}

结果:

练习 18: 滑动窗口最大值

题目 : 给定一个数组和一个窗口大小k,找到滑动窗口中的最大值。

namespace Djproject
{
    internal class SlidingWindowMax
    {
        public static List<int> FindMaxInWindows(int[] nums, int k)
        {
            if (nums == null || nums.Length == 0 || k <= 0)
            {
                return new List<int>();
            }

            List<int> result = new List<int>();
            for (int i = 0; i < nums.Length - k; i++)
            {
                int max = 0;
                for (int j = i; j < i + k; j++)
                {
                    if (nums[j] > max)
                    {
                        max = nums[j];
                    }
                }
                result.Add(max);
            }
            return result;
          
         }
    
        public static void Main()
        {
            int[] nums = { 1, 3, -1, -3, 5, 3, 6, 7 }; 
            int k = 3;
            List<int> maxValues = FindMaxInWindows(nums, k); 
            foreach (int max in maxValues)
            {
                Console.Write(max + "  ");
            }
            
        }
    }
}

结果:

练习 19: 矩阵旋转

题目 : 编写一个函数,将一个N x N的矩阵顺时针旋转90度。

namespace Djproject
{
    internal class MatrixRotation
    {
        public static void RotateMatrix(int[,] matrix)
        {
            int n = matrix.GetLength(0);

            // 先进行矩阵的转置  
            for (int i = 0; i < n; i++)
            {
                for (int j = i; j < n; j++)
                {
                    // 交换 matrix[i, j] 和 matrix[j, i]  
                    int temp = matrix[i, j];
                    matrix[i, j] = matrix[j, i];
                    matrix[j, i] = temp;
                }
            }

            // 然后反转每一行  
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n / 2; j++)
                {
                    // 交换 matrix[i, j] 和 matrix[i, n-j-1]  
                    int temp = matrix[i, j];
                    matrix[i, j] = matrix[i, n - j - 1];
                    matrix[i, n - j - 1] = temp;
                }
            }
        }
    
        static void PrintMatrix(int[,] matrix)
        {
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write(matrix[i, j] + "  ");
                }
                Console.WriteLine();
            }
        }
        public static void Main()
        {
            int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
            RotateMatrix(matrix); PrintMatrix(matrix);
           
        }
    }
}

结果:

 

练习 : 字符串压缩

题目 : 编写一个函数,对字符串进行基本的压缩,如果压缩后的字符串不比原字符串短,则返回原字符串。

namespace Djproject
{
    internal class StringCompressor
    {
        public static string CompressString(string str)
        {
            if (string.IsNullOrEmpty(str)) return str;

            StringBuilder compressed = new StringBuilder();
            char currentChar = str[0];
            int count = 1;

            for (int i = 1; i < str.Length; i++)
            {
                if (str[i] == currentChar)
                {
                    count++;
                }
                else
                {
                    compressed.Append(currentChar);
                    compressed.Append(count);
                    currentChar = str[i];
                    count = 1;
                }
            }

            // 添加最后一个字符及其计数  
            compressed.Append(currentChar);
            compressed.Append(count);

            // 检查压缩后的字符串是否更短  
            if (compressed.Length < str.Length)
            {
                return compressed.ToString();
            }
            else
            {
                return str;
            }
        }
        public static void Main()
        {
            Console.WriteLine(CompressString("aabcccccaaa"));
        }
    }
}

结果:

练习21: 有效的括号序列

题目 : 编写一个函数,检查括号序列是否有效。有效的括号序列要求每对括号都能正确闭合。

namespace Djproject
{
    internal class ValidParentheses
    {
        public static bool IsValid(string s)
        {
            Stack<char> stack = new Stack<char>();

            foreach (char c in s)
            {
                if (c == '(' || c == '[' || c == '{')
                {
                    // 如果是左括号,压入栈中  
                    stack.Push(c);
                }
                else if (c == ')' || c == ']' || c == '}')
                {
                    // 如果是右括号,需要判断栈是否为空以及栈顶的左括号是否与之匹配  
                    if (stack.Count == 0)
                    {
                        // 栈为空,没有匹配的左括号  
                        return false;
                    }

                    char topChar = stack.Pop(); // 弹出栈顶的左括号  

                    if ((c == ')' && topChar != '(') ||
                        (c == ']' && topChar != '[') ||
                        (c == '}' && topChar != '{'))
                    {
                        // 括号不匹配  
                        return false;
                    }
                }
            }

            // 遍历完整个序列后,如果栈为空,则序列有效  
            return stack.Count == 0;
        }
        public static void Main()
        {
            Console.WriteLine(IsValid("()[]{}")); 
        }
    }
}

结果:

 

练习22: 最长公共前缀

题目 : 编写一个函数,找出一组字符串中的最长公共前缀。

namespace Djproject
{
    internal class LongestCommonPrefix
    {
        public static string FindLongestCommonPrefix(string[] strs)
        {
            if (strs == null || strs.Length == 0)
            {
                return "";
            }

            string prefix = strs[0]; // 假设第一个字符串为最长公共前缀  

            for (int i = 1; i < strs.Length; i++)
            {
                while (strs[i].IndexOf(prefix, StringComparison.Ordinal) != 0)
                {
                    // 如果当前字符串不以prefix开头,则缩短prefix  
                    if (prefix.Length == 0)
                    {
                        // 如果prefix已经缩短到空字符串,说明没有公共前缀  
                        return "";
                    }
                    prefix = prefix.Substring(0, prefix.Length - 1);
                }
            }

            return prefix;
        }
        public static void Main()
        {
            string[] strs = { "flower ", "flow ", "flight " };
            Console.WriteLine(FindLongestCommonPrefix(strs));
        }
    }
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值