C#20-25 可乐数、字母加密、降温、冒泡排序、拼凑单词个数

65 阅读3分钟

1.3个可乐瓶换可乐喝,问键盘输入可乐可以换多少瓶可乐,并且剩下多少个空瓶

            //大于2的时候就要循环 
            //先定义有多少瓶可乐,每一次循环喝了多少瓶可乐 剩多少瓶可乐喝完去换
            /*Console.WriteLine("请输入可乐的数量");
            int ping = Convert.ToInt32(Console.ReadLine());
            int heNum = ping;
            //只要空瓶子数量大于2就要进入循环
            while (ping > 2)
            {
                //记录的是每次循环可以换的可乐数量
                heNum += ping / 3; //每次喝的瓶 每次循环会换一次瓶
                //计算的是每次喝完的可乐瓶数量
                ping = ping / 3 + ping % 3; //每次喝完的空瓶子的数量

            }
            Console.WriteLine("空瓶的个数为{0},喝了{1}瓶", ping, heNum);*/

2.字母加密,a到w所有字符要+3 x.y,z-23,A到W所有字符+3 XYZ-23

             //先有一个字符数组,键盘录入字符数组
            char[] charArr = Console.ReadLine().ToCharArray();
            //遍历字符数组
            for(int i = 0; i < charArr.Length; i++)
            {
                if ( 'A'<=charArr[i]&& charArr[i] <= 'Z' || 'a' <= charArr[i] && charArr[i] <= 'z')
                {
                    if ('W' <= charArr[i] && charArr[i] <= 'Z'|| 'w' <= charArr[i])
                    {
                        charArr[i] =(char) (charArr[i] - 23); //强转成字符,因为结果是整型
                    }
                    else
                    {
                        //如果处于正常区间,就直接加3,进行加密。
                        charArr[i] = (char)(charArr[i] + 3);

                    }
                }
            }
            Console.WriteLine(charArr);

3.冒泡排序

            //总比对的长度等于长度-1;比对的最大下标等于  长度-1-上一轮的总轮数-1
            string str = Console.ReadLine();
            //使用空格将字符串进行分割
            string[] strArr = str.Split(" ");
            //创建了一个整型的数组
            int[] arr = new int[strArr.Length];
            //将分割出来的字符转成整型类型,放入整型数组中
            //1 2 4 6 1 12 15 100  length = 8,比较的次数就是为8 - 1 = 7,最后的数字是不用比较的
            将分割的字符数组存储到整型数组中
            for (int i = 0; i < arr.Length; i++)
            {
            //将字符转成ascll表进行十进制转换
                arr[i] = Convert.ToInt32(strArr[i]);
            }
            //循环这个数组,判断相邻俩个数之间的大小
            for (int i = 1; i < arr.Length; i++)
            //也可以i从0开始,后面就是arr.length-1,最后一个数字一定是最大值
            //for (int i = 1; i < arr.Length; i++)
            {
                //比对俩个相邻的数
                for (int j = 0; j < arr.Length - i; j++)
                //for (int j = 0; j < arr.Length - i - 1; j++)
                {
                    //如果前一个比后一个大,就交换
                    if (arr[j] > arr[j + 1])
                    {
                        //定义一个临时变量来进行俩个数据的交换
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            Console.WriteLine(String.Join(" ", arr));
    

思路:最外层循环首先i是从1开始,i<数组长度,内存循环j是从0开始,并且j<数组长度-i,这是因为我们经过每一次的最外层循环都会使得里面的循环减去一次,一开始i=1,j要循环7次,i=2,j要循环6次,i=3,j要循环5次,以此类推。到i=7,j循环一次即可。每次在内层循环中,当前一个值比后一个值大的时候,将前一个值赋值给临时变量存储,同时将后一个值赋值给前一个值,最后把临时变量赋值给前一个值,这样可以把大值放后面。 注意:数组本省也会提供数组的排序方法,如下:

            //数组本身也会提供方法进行排序
            /*int[] arr2 = { 1, 2, 10, 4, 8, 10, 3 };
            Array.Sort(arr2);
            Console.WriteLine(String.Join(" ", arr2));*/

4.最近转秋,气温逐渐下降,小明决定研究天气的变化,他手机了连续N(1<N<10000)天的最低气温数据,现在想知道气温一直下降的最长连续天数

样例输入:

36 32 30 33 28 23 22 30 32

             string str = Console.ReadLine();
            //使用空格将字符串进行分割
            string[] strArray = str.Split(" ");
            int[] temp = new int[strArray.Length];
            for (int i = 0; i < strArray.Length; i++)
            {
                temp[i] = Convert.ToInt32(strArray[i]);
            }
            //创建一个变量来记录每次降温的次数,降温一次加+1
            int count = 1;
            //创建一个变量来记录最大连续降温的天数的值
            int maxCount = 1;
            //循环遍历气温数组
            for (int i = 0; i < temp.Length - 1; i++)
            {
                if (temp[i + 1] < temp[i])
                {
                    count++;
                }
                else
                {
                    if (maxCount < count) maxCount = count;
                    count = 1;
                }

            }
            maxCount = maxCount < count ? count : maxCount;
            Console.WriteLine("最大的连续天数是{0}", maxCount);

5.键盘输入数字字符串,排好序,然后进行一个插入数字操作,然后进行重新排序操作

            //首先输入一串用空格隔开的字符串
            string str = Console.ReadLine();
            Console.WriteLine("请输入一个要插入的数");
            //输入一个整数x
            int num = Convert.ToInt32(Console.ReadLine());
            //创建一个变量来记录插入的下标位置
            int m = 0;
            //使用空格将字符串进行分割
            string[] strArray = str.Split(" ");
            //创建了一个整型的数组
            int[] intArray = new int[strArray.Length];
            //将分割出来的字符转成整型类型,放入整型数组中
            for (int i = 0; i < intArray.Length; i++)
            {
                intArray[i] = Convert.ToInt32(strArray[i]);
            }

            //对数组进行排序
            Array.Sort(intArray);

            //定义一个新的数组,长度加+1
            /*int[] newArr = new int[arr.Length + 1];*/

            for (int i = 0; i < intArray.Length - 1; i++)
            {
                //判断如果是在任意俩个元素之间,那么下标位置就是i+1
                if (intArray[i] <= num && num <= intArray[i + 1])
                {
                    //就记录要插入数字索引的值,
                    m = i + 1;
                    break;
                }
            }
            //如果数组的最后一个元素小于插入的值,那就将数组的最后一个索引值赋值给一个变量进行记录
            if (num > intArray[intArray.Length - 1])
            {
                m = intArray.Length;
            }

            //创建一个长度+1的数组
            int[] intArray1 = new int[intArray.Length + 1];

            //遍历前m个元素
            for (int i = 0; i < m; i++)
            {
                //在插入的值为新数组的最大值的时候,就可以直接进行新数组和旧数组的赋值,因为不影响排序效果
                intArray1[i] = intArray[i];
            }

            //将最大的插入的值放入新数组的最后
            intArray1[m] = num;

            //将插入的数字后的元素存入到新的数组中
            //i从插入数字后的下标开始,到新数组长度结束
            for (int i = m + 1; i < intArray1.Length; i++)
            {
                //i的值对应的是新数组的下标,i-1对应的是老数组的下标
                intArray1[i] = intArray[i - 1];
            }
            Console.WriteLine(String.Join(" ", intArray1));

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

示例 1: 输入:text = "saltaebbolko" 输出:1 示例 2: 输入:text = "saltaebbolkoxballketsba" 输出:2 示例 3: 输入:text = "english" 输出:0   提示: 1 <= text.length <= 10^4 text 全部由小写英文字母组成

            //定义拼凑出来的单词
            string text = Console.ReadLine();
            char[] textArray = text.ToCharArray();
            /*Console.WriteLine(String.Join(" ", textArray));*/
            //basketball
            //声明一个不重名的字符数组
            char[] arr = new char[] { 'e', 'b', 'a', 'l', 'k', 's', 't' };
            //创建一个整型数组,长度为对应的字符数组长度,元素值都为0
            int[] arr1 = new int[] { 0, 0, 0, 0, 0, 0, 0 };

            for (int i = 0; i < text.Length; i++)
            {
                for (int j = 0; j < arr.Length; j++)
                    //判断输入的字符数组元素和定义好的字符数组的元素是否相等,相等则记录每一次的出现的个数
                    if (textArray[i] == arr[j])
                    {
                        //往整型数组里面对应的j下标的元素赋值,赋值代表每次元素出现的次数
                        arr1[j]++;
                    }
            }
            // b a l 三个字母单独的处理,因为这三个字母重复出现了两次
            arr1[1] = arr1[1] / 2;
            arr1[2] = arr1[2] / 2;
            Console.WriteLine("arr1[2]{0}", arr1[2]);
            arr1[3] = arr1[3] / 2;

            int result = arr1[0];

            Console.WriteLine("result{0}", result);

            for (int k = 0; k < arr1.Length; k++)
            {
                result = Math.Min(result, arr1[k]);
            }
            
            //也可以采用直接数组.Min()方法进行获取最小值
            //int minNum = arr1.Min()
            
            Console.WriteLine("您输入的字符串{0},出现的次数为{1}", text, result);