C#学习第六天9.30

434 阅读2分钟

一、练习题目

1、有序数列插入一个数字仍然有序

Console.WriteLine("请随机输入一串用空格隔开的数字");
        string str = Console.ReadLine();//获取控制台输入的数组
        string[] strArray = str.Split(" ");//将数字用空格隔开
        int[] numArray = new int[strArray.Length];//创建一个整数数组
        for(int i = 0; i < strArray.Length; i++)
        {
            numArray[i] = Convert.ToInt32(strArray[i]);//
                                                       //;
        }
        Array.Sort(numArray);//给数组排序
        //输入要插入的数字
        Console.WriteLine("请输入要插入的数字");
        int num = Convert.ToInt32(Console.ReadLine());
        //定义插入数字的下标
        int numIndex = 0;
        //循环有序的数组,判断num该加入到哪个位置
        for(int i = 0; i < numArray.Length-1; i++)//总共要判断的次数,不需要到最后一个(最后一个元素加一没有了,溢出)
        {
            //判断num有没有在数组中间
            if(numArray[i] <= num && num <= numArray[i + 1])
            {
                numIndex = i + 1;
                break;//找到位置后就跳出
            }
        }
        //特殊情况,插入的值为最大值(排到最后了)循环结束时numIndex还是等于0
        if (num >numArray[numArray.Length - 1])//前面用了等号,如果和最大值相等的话,会插到倒数第二个
        {
            numIndex = numArray.Length;
        }
        //上面执行完,会得到插入的下标
        //创建一个新的数组然后赋值输出
        int[] num2Array = new int[numArray.Length+1];
        //循环遍历赋值输出,分为两个节点
        //0-numIndex-1,相当于是和第一个数组中的元素一样,下标也一样
        for(int i = 0; i < numIndex; i++)
        {
            num2Array[i] = numArray[i];
        }
        //numIndex,直接插入num的值
        num2Array[numIndex] = num;
        //numIndex+1 到最后一个
        for(int i = numIndex+1;i<num2Array.Length ; i++)
        {
            num2Array [i] = numArray [i-1];
        }
        Console.WriteLine(string.Join(",", num2Array));
        

2、输入变量名判断是否为合法变量名

        Console.WriteLine("请输入变量名");
         string str1 = Console.ReadLine();
         //创建一个中间变量判断是否为合法字符
         Boolean isleagal = false;

         for (int i = 0; i < str1.Length; i++) //循环遍历每个字符
         {
             if (str1[i] >= 48 && str1[i] <= 57 || str1[i] >= 65 && str1[i] <= 90 || str1[i] >= 90 && str1[i] <= 122 || str1[i] == 95)//看字符是否是数字,字母和下划线,不是的话isleagel为false
             {
                 if (str1[0] >= 48 && str1[0] <= 57)//判断第一个数是否是数字,是数字直接跳出循环,isleagel为false
                 {
                     break;
                 }
                 isleagal = true;//满足所有字符都属于数字、字母和下划线的要求,并且第一位不是数字说明合法,isleagal为true;
             }
             else
             {
                 isleagal = false;
                 break;//不跳出的话就会接着循环,循环会使isleagal在真假状态中来回切换,判断为假时直接跳出
             }
         }
         if (isleagal)
         {
             Console.WriteLine("合法");
         }
         else
         {
             Console.WriteLine("不合法");
         }
         

3、输入一串字符判断是否是回文数

         Console.WriteLine("请输入一串字符");
        string str = Console.ReadLine();
        //定义一个中间变量,记录是否为回文数
        Boolean isPalindrome = true;
        //循环字符串
        for (int i = 0; i < str.Length / 2; i++)//需要对称才是回文,所以只需要判断数组长度的一半
        {

            if (str[i] != str[str.Length - i - 1])//假设一个4位数moom,str[0]=str[3];str[1]=str[2]  =>str[i]=str[n-1-i]
            {
                isPalindrome = false;//不同说明不是回文,直接跳出循环
                break;
            }

        }
        if (isPalindrome)
        {
            Console.WriteLine("回文");
        }
        else
        {
            Console.WriteLine("不是");
        }
        

4、输入一段时间的气温,判断气温连续下降的最大天数

        Console.WriteLine("请输入这段时间的气温");
        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]);

        }
        //记录每次连续降温的次数
        int day = 1;
        //记录最大的连续降温次数
        int max = 1;
        for (int i = 0; i < temp.Length - 1; i++)
        {
            if (temp[i] > temp[i + 1])
            {
                day++;
                if (day > max)
                {
                    max = day;
                }
            }
            else
            {
                //中断了所以需要重新赋值
                day = 1;
            }

        }
        Console.WriteLine("最大连续下降天数是:{0}", max);
        

5、小明整百向妈妈存钱,妈妈保管到年末,就会多给小明20%的钱,妈妈给个月给小明300元,每个月小明有预算支出(输入的每个月的预算),每个月小明减掉花的,够一百就存给妈妈,不够就剩到下个月,可能会超出预算,输入小明的几个月的预算(1<n<=12),如果某个月预算超出则输出对应月份加负号;

        Console.WriteLine("请输入你每个月的预算");
        string str = Console.ReadLine();
        string[] strArray = str.Split(" ");
        int[] budget = new int[strArray.Length];
        //定义一个变量给妈妈的钱
        int mom = 0;
        //表示小明每个月剩下的钱
        int self = 0;

        //赋值,将输入的字符串变为整数(预算)
        for (int i = 0; i < strArray.Length; i++)
        {
            budget[i] = Convert.ToInt32(strArray[i]);
        }
        //遍历数组
        for (int i = 0; i < budget.Length; i++)
        {
            self = 300 + self - budget[i];//每个月的钱
            if (self >= 0)//说明可以存钱
            {
                if (self % 100 == 0)//可以整百的存给妈妈
                {
                    mom += self;//每个月给妈妈的钱要加起来
                    self = 0;//把钱存给妈妈后,剩下的钱为0;

                }
                else
                {
                    mom += (self / 100) * 100;//把整百给妈妈,剩下的钱给下个月

                    self = self - (self / 100) * 100;

                    //Console.WriteLine(mom);
                    //Console.WriteLine(self);
                }
            }
            
            else //破产了
            {

                Console.WriteLine("-{0}", i + 1);
                break;
            }
        }
        Console.WriteLine("小明最后剩下的钱{0},存款为:{1}", self, mom);
        Console.WriteLine("最后有多少钱{0}", self + (mom * 1.2));