小小练习

        //java编程题一个偶数256除以2,直到不能被2整除
        //取对数
       
private static int Function(int x)
        {
            if (x % 2 != 0)//不是偶数
            {
                return -1;
            }

            int r = 0;//结果
            int chushu = x;
            int yushu = chushu % 2;
            while (yushu == 0)
            {
                r++;
                chushu = chushu / 2;
                yushu = chushu % 2;
            }
            return r;

        }
       /************************************************************************/

        /* 五、爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,
         * 若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。
         * 只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?
        /************************************************************************/      

 private static int Function3()
        {
            int x = 0;
            for (; x < 1000; x++)
            {
                if (x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5 && x % 7 == 0)
                {
                    break;
                }
            }
            return x;
        }

        /************************************************************************/
        /* 四、张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,
         * 相乘是880,输出以他们的年龄为前4项的等差数列的前20项。
         * */
        /************************************************************************/
       
private static void Function4()
        {
            int count = 0;
            for (int i=2;i<100;i=i+3)
            {
                count++;
                Console.Write("{0}\t",i);
                if (count>=20)
                {
                    break;
                }
            }
        }

        /************************************************************************/

        /* 题目:已知n个整数,将的奇数放在前,偶数放在后,奇数部分与偶数部分都按升序排列输出。
         * */
        /************************************************************************/


            int[] A = { 3, 2, 1, 4, 5, 6, 7, 3, 2, 5, 3, 2, 1, 5, 6, 3, 2, 4, 2, 7, 4, 2, 43, 1, 4, 5 };
            Function5(A);       

      private static void Function5(int[] A)
        {
            int n = A.Length;
            int[] B=new int[n];

            B[0] = A[0];

            for (int i = 1; i < n;i++ )
            {
                InsertJiOu(A[i], B);
            }
        }

      private static void InsertJiOu(int p, int[] B)
        {
            if (p%2==0)
            {
                int i = 0;
                while (0 != B[i] && B[i]%2==1)
                {
                    i++;
                }
                B[i] = p;
            }
            else
            {
                int i = 0;
                while (0 != B[i] && B[i] % 2 == 1)
                {
                    i++;
                }
                i--;
                int j = i ;
                for (; i < B.Length; i++)
                {
                    B[i] = B[i - 1];
                }
                B[j] = p;
            }          
        }


      /************************************************************************/
        /* 有一有序的数组,要插入一个数,要求排序不乱,且要用二分检索的方法插入数组里
        /************************************************************************/

 
            int[] A={3,4,6,7,8,13,25,36,47,68,89,0};
            int b=33;
            DoInsert(A,b);
            for (int i = 0; i < A.Length;i++ )
            {
                Console.Write("{0}\t", A[i]);
            }

       

        private static void DoInsert(int[] A, int b)
        {
            int left = 0;
            int right = A.Length - 2;
            int middle = (left + right) / 2;
            if (A[middle]>=b)
            {
                while (A[middle] >= b)
                {
                    right = middle;
                    middle = (left + right) / 2;
                }
            }
            else
            {
                while (A[middle] < b)
                {
                    left = middle;
                    middle = (left + right) / 2;
                }
            }
            for (int i = A.Length-1; i >= middle;i-- )
            {
                A[i] = A[i - 1];
            }
            A[middle] = b;
        }

        /*
         * 第二题:已经有一个包括了多行文本的字符串。
         * 请写一个函数,能够输出字符串中最长的行和最短的行。
         * 如果最长和最短的不止一行,请输出最长和最短的多行。
         * 请写出性能比较好的代码。
         * Fun(string lines)
         * {
         * 1、拆分成多行;
         * 2、循环为每行计算长度,记录最大和最小行的位置;
         * 3、打印输出
         * }
         * */
       
        private static void Function8()
        {
            //包括了多行文本的字符串 应该是string[] ,而不是string

            string[] lines ={   "第二题:已经有一个包括了多行文本的字符串。",
                                "请写一个函数,能够输出字符串中最长的行和最短的行。",
                                "如果最长和最短的不止一行,请输出最长和最短的多行。",
                                "请写出性能比较好的代码。"};
            Fun2(lines);
        }

        private static void Fun2(string[] lines)
        {
            int maxIndex = int.MinValue;//长度最长的行的长度
            int minIndex = int.MaxValue;//长度最短的行的长度

            //第一次循环,找出最大的长度和最小的长度
            for (int i = 0; i < lines.Length;i++ )
            {
                int len=lines[i].Length;
                if (len>maxIndex)
                {
                    maxIndex = len;
                }
                if (len<minIndex)
                {
                    minIndex = len;
                }
            }

            //第二次循环,打印符合要求的字符串
            for (int i = 0; i < lines.Length; i++)
            {
                string s=lines[i];
                int len = s.Length;
                if (len == maxIndex)
                {
                    Console.WriteLine("最长的行:{0}",s);
                }
                if (len == minIndex)
                {
                    Console.WriteLine("最短的行:{0}", s);
                }
            }
        }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值