C# 练习

C#练习
斐波那契前N位
冒泡排序
回文
最大公约数和最小公倍数
查找一个字符串中出现次数最多的字符
快速排序
二进制字符串转换十进制整数
判断素数

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

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //斐波那契前N位
            //Fibonacci();

            //冒泡排序
            //BubbleSort();

            //回文
            //Palindrome();

            //最大公约数和最小公倍数
            //GcdAndLcm();
            
            //查找一个字符串中出现次数最多的字符
            //SearchMostChar();

            //快速排序
            //QuickSort();

            //将一个二进制字符串转换十进制整数。
            //BinaryToDecimal();

            //判断素数。
            //IsPrime();


            Console.ReadLine();
        }

        public static List<int> ListNum = new List<int>();
        /// <summary>
        /// 输出前N个斐波那契数字
        /// </summary>
        public static void Fibonacci()
        {
            Console.WriteLine("Input a number");
            int inputNum = int.Parse(Console.ReadLine() ?? string.Empty);
            var oneNum = 1;
            ListNum.Clear();
            if (inputNum < 0)
            {
                return;
            }

            for (var i = 0; i < inputNum; i++)
            {
                if (i > 1)
                {
                    oneNum = ListNum[i - 2] + ListNum[i - 1];
                    // Console.WriteLine($"{i}:{oneNum}");
                }
                ListNum.Add(oneNum);
            }
            Console.WriteLine("List: " + string.Join(", ", ListNum));
            //Console.WriteLine($"list:{ListNum}");
            Console.WriteLine("Press any key to exit...");
            Console.ReadLine();
        }

        /// <summary>
        /// 冒泡排序
        /// </summary>
        public static void BubbleSort()
        {

            int times = 0;
            Console.WriteLine("Input a number to burn a random Array");
            int mouse = int.Parse(Console.ReadLine() ?? string.Empty);
            int[] intArray = RandomArray(mouse);

            int forLength = intArray.Length - 1;
            for (var i = 0; i < intArray.Length; i++)
            {

                for (var j = 0; j < forLength; j++)
                {
                    times++;
                    //Console.WriteLine($"j:{j}");
                    if (intArray[j] > intArray[j + 1])
                    {
                        (intArray[j + 1], intArray[j]) = (intArray[j], intArray[j + 1]);//值置换
                        mouse = j;
                    }
                }
                Console.WriteLine($"i:{i};mouse:{mouse}");
                forLength = mouse;
                if (mouse == 0)
                    break;
            }
            Console.WriteLine("List: " + string.Join(", ", intArray));
            Console.WriteLine($"times:{times}");
        }

        /// <summary>
        /// 回文
        /// </summary>
        public static void Palindrome()
        {
            Console.WriteLine("Input a String and click Enter to end");
            string input = Console.ReadLine();

            if (input != null)
            {
                string reversedString = new string(input.Reverse().ToArray());

                将input字符倒序排列组成新的字符串
                //char[] charArray = input.ToCharArray();
                //Array.Reverse(charArray);
                //string reversedString = new string(charArray);
                Console.WriteLine("Reversed string: " + reversedString);
                if (input == reversedString)
                {
                    Console.WriteLine("Is palindrome");
                }
            }
        }

        /// <summary>
        /// 最大公约数和最小公倍数
        /// </summary>
        public static void GcdAndLcm()
        {
            Console.WriteLine("Input first number and click Enter to continue");
            string s1 = Console.ReadLine();
            Console.WriteLine("Input first number and click Enter to continue");
            string s2 = Console.ReadLine();
            if (s1 == null || s2 == null) return;
            int n1 = int.Parse(s1);
            int n2 = int.Parse(s2);
            //if (n1 < n2)
            //{
            //    (n1,n2)=(n2,n1);
            //}
            int outGcd = n1 % n2 == 0 ? n2 : GCD(n1, n2);
            Console.WriteLine($"GCD:{outGcd}");
            Console.ReadLine();
            int outLcm = LCM(n1, n2,outGcd);
            Console.WriteLine($"LCM:{outLcm}");

        }

        public static int GCD(int a, int b)
        {
            while (b != 0)
            {
                (a, b) = (b, a % b);
            }
            return a;
        }

        public static int LCM(int a, int b,int outGcd)
        {
            return a * b / outGcd;
        }

        /// <summary>
        /// 查找使用最多的字符
        /// </summary>
        public static void SearchMostChar()
        {
            string inputStr = Console.ReadLine();
            if (inputStr == null) return;

            int maxCount = 1;
            List<char> mostChars = new List<char>();
            Dictionary<char, int> dictionary = new Dictionary<char, int>();
            foreach (char c in inputStr)
            {
                if (dictionary.ContainsKey(c))
                {
                    dictionary[c]++;
                    if (maxCount < dictionary[c])
                    {
                        maxCount = dictionary[c];
                        mostChars.Clear();
                        mostChars.Add(c);
                    }
                    else if (maxCount == dictionary[c])
                    {
                        mostChars.Add(c);
                    }

                }
                else
                {
                    dictionary.Add(c, 1);
                    if (maxCount == 1)
                    {
                        mostChars.Add(c);
                    }
                }
            }

            Console.WriteLine($"MostSameCharNumber:{maxCount}");
            foreach (var item in mostChars)
            {
                Console.WriteLine($"{item}");
            }
        }

        /// <summary>
        /// 生成随机数组
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        public static int[] RandomArray(int n)
        {
            Random random = new Random();
            int[] newArray = new int[n];

            for (int i = 0; i < n; i++)
            {
                newArray[i] = random.Next(100); // 生成一个随机整数
            }

            return newArray;
        }

        public static int quickTime = 0;

        /// <summary>
        /// 快速排序
        /// </summary>
        public static void QuickSort()
        {
            Console.WriteLine("Input a number to burn a random Array");
            int n = int.Parse(Console.ReadLine() ?? string.Empty);
            int[] array = RandomArray(n);
            Console.WriteLine("array:" + string.Join(", ", array));

            Console.WriteLine("enter to go on");
            Console.ReadLine();
            Quick(array, 0, array.Length - 1);

            Console.WriteLine("QuickSort:" + string.Join(",", array));
            Console.WriteLine($"quickTime:{quickTime}");

        }

        public static void Quick(int[] _array, int _start, int _end)
        {
            Console.WriteLine($"Quick");
            if (_start >= _end)
                return;
            int key = _array[_start];
            int i = _start;
            int j = _end;
            while (i < j)
            {
                while (key < _array[j] && i < j)
                {
                    j--;
                    quickTime++;
                }

                if (i < j)
                {
                    _array[i] = _array[j];
                }

                while (key > _array[i] && i < j)
                {
                    i++;
                    quickTime++;
                }

                if (i < j)
                {
                    _array[j] = _array[i];
                }
            }
            _array[i] = key;
            Quick(_array, _start, i - 1);
            Quick(_array, i + 1, _end);
        }

        /// <summary>
        /// 二进制转十进制
        /// </summary>
        public static void BinaryToDecimal()
        {
            string binary = Console.ReadLine();
            int decimalValue = 0;
            int power = 0;
            for (int i = binary.Length - 1; i >= 0; i--)
            {
                if (binary[i] == '1')
                {
                    decimalValue += (int)Math.Pow(2, power);
                }
                power++;
            }
            Console.WriteLine($"{binary} to: {decimalValue}");
        }

        /// <summary>
        /// 判断素数
        /// </summary>
        public static void IsPrime()
        {
            int input = int.Parse(Console.ReadLine() ?? string.Empty);
            if (input < 2)
                return;
            if (input % 2 == 0)
            {
                Console.WriteLine(input == 2 ? $"{input} is Prime" : $"{input} is not Prime");
                return;
            }

            for (int i = 3; i < input; i+=2)
            {
                if (input % i == 0 && input != i)
                {
                    Console.WriteLine($"{input} is not Prime");
                    return;
                }
            }
            Console.WriteLine($"{input} is Prime");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值