一、输入一串单词判断能组成basketball几遍并输出
Console.WriteLine("请输入一串单词");
string str = Console.ReadLine();//定义一个字符串str(是输入的)
//创建一个数组存储字母输出的次数,int数组只有长度的话,值默认都是0
int[] count = new int[7];//ba(ba)sketl(l)
//遍历数组
for (int i = 0; i < str.Length; i++)//取字符串中的字母
{
switch (str[i])//字符串可以像数组一样直接取值(所以不需要变为数组),但是不能改变,
{
//把每个字母出现的次数放在对应下标里面
case 'b':
++count[0];//记录b 的数量
break;
case 'a':
++count[1];//记录a 的数量
break;
case 's':
++count[2];//记录s 的数量
break;
case 'k':
++count[3];//记录k 的数量
break;
case 'e':
++count[4];//记录e 的数量
break;
case 't':
++count[5];//记录t 的数量
break;
case 'l':
++count[6];//记录l 的数量
break;
}
}
count[0] /= 2;//0是记录b的数量,因为b需要使用两次,所以需要/2
count[1] /= 2;//a
count[6] /= 2;//l
//求出最小值(在其他字母都满足时,s3个k10个,还是只能拼成3个,所以需要输出最小值)
int mincount = count.Min();
Console.WriteLine(mincount);
二、封装函数
1、判断一个数是否是真素数(正反都是素数)
//首先封装一个函数,判断是否是素数,再将这个数字逆转,再判断是不是素数
//创建一个函数判断是不是素数
static bool isPrime(int num)
{
//判断是不是素数并返回结果
for(int i = 2;i < num; i++)
{
if (num % i == 0)//从2开始一直到数本身,存在一个能被该数整除的数,所以不是素数,需要直接false
return false;
}
return true;
}
//创建一个函数,将数反转,字符串-》数组,数组反转-》字符串
static int getReverse(string strNum)
{
string strNum2 = "";
//使用循环,遍历每个字符没在逆序输出(使用需要两个字符串)
for(int i = strNum.Length-1;i>= 0; i--)//strNum是输入的字符串,将他逆序输入到strNum2中,
{
strNum2 += strNum[i];
}
return Convert.ToInt32(strNum2);//将字符串变为int类型
}
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.Write(strNum3);
2、定义一个函数getDivisor,输出一个数的所有因数,
static void getDivisor(int str)
{
string str2 = "";
for (int i = 1; i <= str; i++)
{
if (str % i == 0)
{
if (str2 == "")
{
str2 += i;
}
else
{
str2 += "," + i;
}
}
}
Console.WriteLine(str2);
}
getDivisor(Convert.ToInt32(Console.ReadLine()));//将输入的数传入方法内
三、递归函数
1、输入n求出n项的斐波那契数列(后面数是前两个数的和)
static int fib(int num)//num是项数
{
//出口
if(num==1||num==2)return 1;//知道第一项和第二项是1,1就可以推出后面n项
//关系式
return fib(num - 1) + fib(num - 2);
}
int num=Convert.ToInt32(Console.ReadLine());
//num项
for(int i = 1; i <= num; i++)
{
Console.Write(fib(i)+" ");
}
2、有关系式,11+22+....+k*k<2000,编一个程序,求满足此关系的k的最大值
//求关系式:
//f(k)=1*1+2*2+...k*k-->f(k-1)=1*1+2*2+...k-1*k-1-->f(k)=f(k-1)+k*k
//出口
//k=1返回1因为k=1时没有f(k-1)
static int Max(int num)//1--num的平方和
{
if (num==1) return 1;
return Max(num - 1) + (num * num);
}
int num=1;
while (true)
{
if (Max(num) >= 2000)
{
break;
}
num++;
}
Console.WriteLine(num - 1);
3、第一天摘n个桃子,当时就吃了一半,又多吃一个,第二天又一半加一个,到第十天就只剩一个了,问第一天摘了几个,并且打印每天剩下的桃子数
//关系式逆推f(n)=(f(n+1)+1)*2,
//出口f(10)=1;
static int getNum(int num)
{
if (num == 10) return 1;
return (getNum(num + 1) + 1) * 2;
}
Console.WriteLine("第一到十天的桃子数分别是:{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", getNum(1), getNum(2), getNum(3), getNum(4), getNum(5), getNum(6), getNum(7), getNum(8), getNum(9), getNum(10));