几道简单C#算法题

这篇博客介绍了编程中的几种经典算法实现,包括冒泡排序、递归计算阶乘、斐波那契数列,以及如何处理整数数组。此外,还展示了如何找到数组中的最大值、最小值和平均值,以及如何生成不重复的随机数列和计算不重复元素的个数。最后,通过Switch语句实现了一个简单的猜拳游戏。
摘要由CSDN通过智能技术生成
  1. 冒泡排序法
    两两交换,从左到右,把最大值排到后面
     /// <summary>
        /// 冒泡排序法
        /// </summary>
        public static void Func()
        {
            int[] arr = { 12, 3423, 454, 2, 123, 234, 12, 2 };
            int temp = 0;
            
            for (int i = 0; i < arr.Length - 1; i++)
            {
                for (int j = 0; j < arr.Length - 1-i; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            foreach (var item in arr)
            {
                Console.WriteLine(item);
            }

        }
  1. 计算10的阶乘,使用递归
    a.递归的定义:任何一个方法既可以调用其他方法又可以调用自己,**而当这个方法调用自己时,我们就叫它递归函数或者递归方法。
    b.递归的三个步骤:
    明确函数要坐什么?
    函数要实现什么功能?
    明确递归的结束条件(退出递归的条件) 找到函数的等价关系式,
    c.以下列出1至10的阶乘:
    1!=1,2!=2,3!=6,4!=24,5!=120,6!=720,7!=5040,8=40320,9!=362880,10!=3628800。
    找出阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
 /// <summary>
        /// 计算10的阶乘,使用递归
        /// </summary>
        public static int  Func1(int n)
        {
            if (n<0)
            {
                return 0;
            }
            if (n==1||n==0)
            {
                return 1;
            }
            else
            {
                return Func1(n - 1) * n;
            }
        }

d.斐波那契数列这个也是递归很经典的题目

 public static int Fun(int n) {
    // 先写递归结束条件
    if (n <= 2) {
        return 1;
    }
    // 写等价关系式
    return f(n - 1) + f(n - 2);
}
  1. 输入整形数组,合并转换为逗号分隔的字符串
    用foreach循环也可以,很简单。
 /// <summary>
        /// 输入整形数组,合并转换为逗号分隔的字符串
        /// </summary>
        /// <returns></returns>
        public static string Fun2()
        {
            int[] arr = { 1, 2,34,3 };
            string at="";
            for (int i = 0; i < arr.Length; i++)
            {
                at += arr[i].ToString()+",";
            }
            return at;
        }
  1. 一列数的规则如下:1,1,2,3,5,8,13,21,34,求第三十位时的大小,用递归实现。
    观察递归结束条件,可知,从第三位开始,每一位的数值等于前两位之和。
    即是 m=Fun(n-1)+Fun(n-2)
 /// <summary>
        /// 一列数的规则如下:1,1,2,3,5,8,13,21,34,求第三十位时的大小,用递归实现。
        /// </summary>
        /// <returns></returns>
        public static int Fun3(int n)
        {
            if (n <= 0)
            {
                return 0;
            }
            if (n == 1 || n == 2)
            {
                return 1;
            }
            else
            {
               return Fun3(n - 1) + Fun3(n - 2);
            }
        }
  1. 输入五个实数,求最大值,最小值,平均值,不用数组。
public static void Func()
{
         Console.WriteLine("请输入第一个数字");
            var a = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入第二个数字");
            var b = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入第三个数字");
            var c = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入第四个数字");
            var d = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入第五个数字");
            var e = int.Parse(Console.ReadLine());
            //找出abc中最大值赋给max1,再由max1和d,e去比。
            var max1 = a > b ? (a > c ? a : c) : (b > c ? b : c);
            var max = max1 > d ? (max1 > e ? max1 : e) : (d > e ? d : e);

            var min1= a < b ? (a < c ? a : c) : (b < c ? b : c);
            var min = min1 < d ? (min1 < e ? min1 : e) : (d < e ? d : e);
            Console.WriteLine($"平均数为{(a + b + c + d + e) / 5}"  );
            Console.WriteLine($"最大值为{max}");
            Console.WriteLine($"最小值为{min}");
}
  1. 随机输入1-100个数,不能重复
 public static void Fun5()
        {
           
            List<int> art = new List<int>();
            //定义随机数
            var ran = new Random();
            while (art.Count<100)
            {
                var a = ran.Next(1, 101);
                if (!art.Contains(a))
                {
                    art.Add(a);
                }
            }
            int[] arr = art.ToArray();
            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }

            Console.WriteLine($"数组的长度为{arr.Length}");
        }
  1. 写一段程序,计算其中不重复元素的个数,方法一:用HashSet(倒序插入,集合自带去重)
 public static void Fun6()
        {
            //方法一,用hashSet去重(集合自带去重,hashSet插入顺序是由后排到前)
            int[] arr = { 3, 5, 9, 8, 10, 5, 3 };
            HashSet<int> vs = new HashSet<int>(arr);
            Console.WriteLine($"不重复元素的个数为{vs.Count}");

        }

方法二:用新旧数组去重

  public static void Fun7()
        {

            int[] arr = { 3, 5, 9, 8, 10, 5, 3 };
            List<int> art = new List<int>();
            foreach (var item in arr)
            {
                if (!art.Contains(item))
                {
                    art.Add(item);
                }
            }
            Console.WriteLine($"不重复个数为{art.Count}");
        }
  1. 人机猜拳小游戏,用Switch循环
    注意rand.next方法生成随机数区间是左开右闭,这里取到的是1,2,3,
  //做人机猜拳用Switch
        public static void Fun3()
        {
            Console.WriteLine("请输入(1-3):1.剪刀,2.石头,3.布");
            int m = int.Parse(Console.ReadLine());
            if (m == 1)
            {
                Console.WriteLine("你出:剪刀");
            }
            if (m == 2)
            {
                Console.WriteLine("你出:石头");
            }
            if (m == 3)
            {
                Console.WriteLine("你出:布");
            }
            var rand = new Random();
            //注意rand.next方法生成随机数区间是左开右闭,这里取到的是1,2,3,
            var n = rand.Next(1, 4);
            switch (n)
            {
                case 1:
                    Console.WriteLine("计算机出:剪刀");
                    break;
                case 2:
                    Console.WriteLine("计算机出:石头");
                    break;
                case 3:
                    Console.WriteLine("计算机出:布");
                    break;
            }
            if (m == 1 && n == 1||m==2&&n==2||m==3&&n==3)
            {
                Console.WriteLine("结果是:平局");
            }
            //1.剪刀,2.石头,3.布
            if (m==1&&n==2||m==2&&n==3||m==3&&n==1)
            {
                Console.WriteLine("结果是:计算机赢");
            }
            if (m==1&&n==3||m==2&&n==1||m==3&&n==2)
            {
                Console.WriteLine("结果是:你赢");
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值