C#基础10.8——函数

89 阅读1分钟

复习

            //求最大篮球单词数 baskball
            //输入字符串 判断里面单词数 a,b,e,k,l,s,t七个字母 2个s 5个e取里面次数最小的,用数组来收集
            //假设a是下标0 以此类推 b->下标1 t->下标6 出现2次,a,l,b 算的时候要除以2 求出数组中最小的值
            string str=Console.ReadLine();
            int[] numArray = new int[7];
            for(int i = 0; i < numArray.Length; i++)
            {
                if (str[i] == 'a')
                {
                    numArray[0] += 1;
                }
                else if (str[i] == 'b')
                {
                    numArray[1]++;
                }
                else if (str[i] == 'e')
                {
                    numArray[2]++;
                }
                else if (str[i] == 'k')
                {
                    numArray[3]++;
                }
                else if (str[i] == 'l')
                {
                    numArray[4]++;
                }
                else if (str[i] == 's')
                {
                    numArray[5]++;
                }
                else if (str[i] == 't')
                {
                    numArray[6]++;
                }
            }
            numArray[0] /= 2;
            numArray[4] /= 2;
            numArray[1] /= 2;
            Console.WriteLine(numArray.Min());

函数的使用

            //static是修饰符 表示静态函数 void表示返回值类型,如果没有返回值,返回值为空 那么类型为void 也可以是string int bool 型
            Max(1);

            static int Max(int num,int num1=2)/*函数名(形参1,形参2...),有初始值的放后面*/
            {
                Console.WriteLine(num);
                return 2;/*当执行到return时表示函数的结束,return后面的函数不会执行*/
            } 
            //例题1:求真素数 找出正整数N和M之间的所有真素数,
            //真素数定义:如果一个正整数P为素数,且其返序也为素数,那么P就为真素数 
            //输入格式为两个数从小到大空格隔开,输出时按从小到大用逗号隔开
            //创建方法,判断素数
            static bool isPrime(int num)
            {
                for (int i = 0; i < num; i++)
                {
                    if (num % i == 0)
                    {
                        return false;
                    }
                }
                return true;
            }
            //创建一个数将其翻转
            static int getReverse(int num)
            {
                string strNum=Convert.ToString(num);
                string strNum2 = "";
                for(int i = 0; i < strNum.Length-1; i++)
                {
                    strNum2 += strNum[i];
                }
                return Convert.ToInt32(strNum2);
            }
            //传入两个数
            string str=Console.ReadLine();
            string[] strArray = str.Split(" ");
            int M=Convert.ToInt32(strArray[0]);
            int N = Convert.ToInt32(strArray[1]);
            string strOut = "";

            //循环遍历 M到N的数 判断是否是真素数
            for(int i=M; i<=N; i++)
            {
                if (isPrime(i) && isPrime(getReverse(i)){
                    if (strOut == "")
                    {
                        strOut += i;
                    }
                    else
                    {
                        strOut += ","+i;
                    }
                }
            }
            Console.WriteLine(strOut);
        
            //例题2:定义一个函数getDivisor,用来取一个数的所有因子,把所有因子返回
            int num=Convert.ToInt32(Console.ReadLine());
            getDivisor(num);
            
            static int getDivisor(int num)
            {
                for(int i = 1; i < num; i++)
                {
                    if (num % i == 0)
                    {
                        Console.WriteLine(i);
                    }
                }
                return num;
            }
            //递归 例题3:求斐波那契数列

            static int Fib(int n)
            {
                
                if (n == 1 || n == 2) return 1;
                return Fib(n - 1) + Fib(n - 2);
            }
            int num = Convert.ToInt32(Console.ReadLine());
            for(int i = 1; i <= num; i++)
            {
                Console.WriteLine(Fib(i)+"");
            }
            //例题4:求1*1+2*2+3*3+...+k*k<2000 求出此关系的k的最大值
            //f(k)=f(k-1)+k*k
            static int getFk(int k)
            {
                if (k == 1) return 1;
                return getFk(k-1)+k*k;
            }
            int i = 1;
            while (true)
            {
                if(getFk(i) >=2000) break;
                i++;
            }
            Console.WriteLine(i-1);
            //例题5:猴子吃桃,第一天摘下n个桃子,当时就吃掉一半,多一个,第二天又吃掉1的一半多一个,以后每天都吃掉前一天剩下的一半多一个,
            //到第10天时候只剩下一个,问一共摘下来多少个桃子?并反向打印每天所剩下的桃子数
            //第十天:1,第九天:(1+1)*2=4,第八天:(4+1)*2=10,第七天:(10+1)*2=22.....
            //f(n)=(f(n+1)+1)*2
            static int getpc(int day)
            {
                if (day == 10) return 1;
                return (getpc(day + 1) + 1) * 2;
            }
            for(int i = 1; i < 11; i++)
            {
                Console.WriteLine("第{0}天桃子数:{1}",i,getpc(i));
            }