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 全部由小写英文字母组成
一、函数(方法)
1.函数的定义
封装一段可执行的代码块
2.为什么要用函数
- 如果重复执行某段代码,就要重复写很多次
- 重复代码多了不容易阅读,管理和维护
3.函数的基本结构
4.函数调用
5.练习题 求真素数
6.方法中的参数数组
7.函数重载(Overload)
有时候我们可能需要使用同一个函数,但是传入的参数类型不一样,或者函数体中只有细微变动,这样我们可以使用函数重载的方式,根据传入参数的类型执行对应的函数
二、递归函数
1.递归函数的理解
递归就是,函数中调用自己,这样就会进入一直调用自己的套娃行为,所以递归一般会有一个出口,这个出口的目的就是停止调用自己
2.递归的简单写法举例
3.练习题1 求斐波那契数列
- 提示:已知 1 1 2 3 5 8 13 21 34... 我们发现后面数是前两个数的和,我们称这种数列为斐波那契数列
- 题目要求:输入n,求出n项的斐波那契数列
- 例:输入4 输出 1 1 2 3
4.练习题2
有关系式1 * 1+2 * 2+3 * 3+...k * k<2000,编一个程序,求出满足此关系的k的最大值,利用递归和循环解决这个问题
5.练习题3 猴子摘桃问题
三、代码展示
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);*/