vr引擎设计-c#基础第六天

80 阅读2分钟

1.数组回顾

2.字符串相关方法回顾

3.循环回顾

4.国庆作业

给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "basketball"(篮球)。字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "basketball"。  

示例 1: 输入:text = "saltaebbolko" 输出:1

示例 2: 输入:text = "saltaebbolkoxballketsba" 输出:2

示例 3: 输入:text = "english" 输出:0  

提示: 1 <= text.length <= 10^4 text 全部由小写英文字母组成

image.png

image.png

image.png

一、函数(方法)

1.函数的定义

封装一段可执行的代码块

2.为什么要用函数

  • 如果重复执行某段代码,就要重复写很多次
  • 重复代码多了不容易阅读,管理和维护

3.函数的基本结构

image.png

image.png

4.函数调用

image.png

5.练习题 求真素数

image.png

image.png

image.png

image.png

6.方法中的参数数组

image.png

image.png

7.函数重载(Overload)

有时候我们可能需要使用同一个函数,但是传入的参数类型不一样,或者函数体中只有细微变动,这样我们可以使用函数重载的方式,根据传入参数的类型执行对应的函数

image.png

image.png

二、递归函数

1.递归函数的理解

递归就是,函数中调用自己,这样就会进入一直调用自己的套娃行为,所以递归一般会有一个出口,这个出口的目的就是停止调用自己

2.递归的简单写法举例

image.png

image.png

3.练习题1 求斐波那契数列

  • 提示:已知 1 1 2 3 5 8 13 21 34... 我们发现后面数是前两个数的和,我们称这种数列为斐波那契数列
  • 题目要求:输入n,求出n项的斐波那契数列
  • 例:输入4 输出 1 1 2 3

image.png

4.练习题2

有关系式1 * 1+2 * 2+3 * 3+...k * k<2000,编一个程序,求出满足此关系的k的最大值,利用递归和循环解决这个问题

image.png

5.练习题3 猴子摘桃问题

image.png

image.png 三、代码展示


using System;

namespace demo10_08
{
    class Program
    {
       /* //static 修饰符 静态函数
        //void 表示返回值的类型  如果返回值为空 就是void类型  也可以是bool,int,string等
        //Main  函数名(方法名)
        //Main(形参)

        //创建一个求最大值的函数
        static int Max(int num1, int num2) //参数可以赋初始值  赋初始值的参数要放到后面
        {
            return num1 > num2 ? num1 : num2;
        }
        Console.WriteLine(Max(10, 67, 43, 68, 13, 78));//函数的调用


        static int Max(params int[] intArray)  //params  将一串数字转换为整型数组
        {
            return intArray.Max();//函数结束的标志就是return
        }
       */


        /*//函数的重载  Overload
        static double Max(params double[] doubleArray)
        {
            Console.WriteLine(2);
            return doubleArray.Max();
        }
*/

        static void Main(string[] args)
        {



            /*//递归函数
            static int getNum(int num)
            {
                if (num == 1) return 2;

                return getNum(num - 1) + 1;
            }
            Console.WriteLine(getNum(3));*/


            /*//例子:求斐波那契数列    1 1 2 3 5 8 13 21 34...
            //第一步 求出关系式  f(n)=f(n-1)+f(n-2)    第二步 留出口  f(1)=1  f(2)=1
            static int Fib(int num)
            {
                //给出口
                if (num == 1 || num == 2) return 1;

                return Fib(num - 1) + Fib(num - 2);
            }
            int num = Convert.ToInt32(Console.ReadLine());
            for (int i = 1; i <= num; i++)
            {
                Console.Write(Fib(i) + " ");
            }
*/


            /*//例子:有关系式1*1+2*2+3*3+...+k*k<2000,求k   关系式f(n)=f(n-1)+n*n
            static int getNum(int k)
            {
                if (k == 1) return 1;
                return getNum(k - 1) + k * k;
            }
            int k = 1;
            while (true)
            {
                if (getNum(k) >= 2000) break;
                k++;
            }
            Console.WriteLine(k - 1);*/


           /* //例子:猴子吃桃    关系式f(n)=(f(n+1)+1)*2
            static int getNum(int num)
            {
                if (num == 10) return 1;
                return (getNum(num + 1) + 1) * 2;
            }
            Console.WriteLine(getNum(1));*/



            /* Console.WriteLine(Max(10, 11));  //调用函数
             Console.WriteLine(Max(1.3, 1.4, 1.5, 1.6));  //调用重载函数*/



            /*//例子:最大篮球单词数
            string str = Console.ReadLine();
            //每个字母出现的次数存到数组中
            int[] num = new int[7];  //下标为0对应的是a  以此类推 a b e k s t l
            //遍历字符串,把每个字母出现的次数放到对应的下标里面
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == 'a')
                {
                    num[0]++;
                }
                else if (str[i] == 'b')
                {
                    num[1]++;
                }
                else if (str[i] == 'e')
                {
                    num[2]++;
                }
                else if (str[i] == 'k')
                {
                    num[3]++;
                }
                else if (str[i] == 's')
                {
                    num[4]++;
                }
                else if (str[i] == 't')
                {
                    num[5]++;
                }
                else if (str[i] == 'l')
                {
                    num[6]++;
                }
            }
            num[0] /= 2;
            num[1] /= 2;
            num[6] /= 2;

            //求数组中的最小值
            int minNum = num.Min();
            Console.WriteLine(minNum);*/



            /*//例子:求真素数
            //创建一个函数判断是不是素数
            static bool isPrime(int num)
            {
                //判断是不是素数 返回结果
                for (int i = 2; i < num; i++)
                {
                    if (num % i == 0) return false;
                }
                return true;
            }
            //创建一个将数翻转的函数   利用循环 字符串-->数
            static int getReverse(string strNum)
            {
                //创建一个新的字符串
                string strNum2 = "";
                //使用循环 遍历每个字符  再倒着拼接出对应的字符串 --> 数
                for (int i = strNum.Length - 1; i >= 0; i--)
                {
                    strNum2 += strNum[i];
                }
                return Convert.ToInt32(strNum2);
            }

            int M = Convert.ToInt32(Console.ReadLine());
            int N = Convert.ToInt32(Console.ReadLine());
            //存放输出结果
            string strNum3 = "";
            //循环遍历数
            for (int i = M; i <= N; i++)
            {
                if (isPrime(i) && isPrime(getReverse(Convert.ToString(i))))
                {
                    //判断是不是第一个数字,如果是 就不用逗号拼接
                    if (strNum3 == "")
                    {
                        strNum3 += i;
                    }
                    else
                    {
                        strNum3 += "," + i;
                    }
                }
            }
            Console.WriteLine(strNum3);*/