Bilibili初试算法题

题目1:
一个长度为N的整数数组(N>2),找出其中相乘最大的2个数。如Arr=[1,2,3],则最大值为2X3=6,返回 2,3
只需实现一个函数,函数定义:int fun(Arr){return 相乘最大的2个数;}

题目2:
一个大小是M*N大小的白色画板P(r=255,g=255,b=255), 即M像素*N像素,每个像素由r、g、b共 3个颜色组成,每个颜色值是0~255。设计一个方法、数据结构,实现对这张白色图片绘制一些实心矩形。
函数声明大概是 draw(P, 矩形数据, 绘制颜色),支持2种输出:A:打印图片结果 B:存到文件中(不需要读取功能)

可以打印结果(打印数值即可,不要绘图api、不要绘图api、不要绘图) , PrintImg(P):
(r,g,b)(r,g,b) (r,g,b).....
(r,g,b)(r,g,b) (r,g,b).....
(r,g,b)(r,g,b) (r,g,b).....
...
存到文件中 , SaveImg(P):
f = open(filename, 'w')
f.write(P)

题目1

拉出来快速排序,找最大两个数就完事了

        static void Main(string[] args)
        {
            int []arr={8,2,3,4,5};
            fun(arr);

            Console.ReadLine();
        }
        /// <summary>
        /// 输出最大两个数
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        static int fun(int[] arr)
        {
            List<int> listarr = arr.ToList();
            listarr.Sort((x, y) => -x.CompareTo(y));
            //降序排序,当数字大于0时,则直接返回前两位
            //当数字小于0时,则逆置数组,返回前两位
            if (listarr[0]>=0)
            {
                Console.WriteLine(listarr[0] + " " + listarr[1]);
            }
            else
            {
                listarr.Reverse();
                Console.WriteLine(listarr[0] + " " + listarr[1]);
            }
            return 1;
        }

题目2

题目意思的应该是定义一个白色画板,我们把这个画板称为矩形A。绘制实心矩形,这个实心矩形称为矩形B。在矩形A里面画一个矩形B。(说白了就是在矩形里画矩形)例如画板矩形为一个4X3矩形,

那么假设矩形A为

0 0 0 0

0 0 0 0

0 0 0 0

在里面以(0,0)为起始位置画一个3x2矩形的结果应为

1 1 1 0

1 1 1 0

0 0 0 0

其中的数字1的位置就是每个像素点的位置,再将其转化成RGB形式即可。

   //定义一个P结构体
    public struct P
    {
        public int M;
        public int N;       
        public Rectangle rectangle;
        public Color color;
    }
    //创建功能枚举
    public enum Function
    {
        A = 1, B = 2
    }
    public class Draw
    {
        public void DrawRectangle(P p, Rectangle rectangle, Color color, Function function)
        {
            p.rectangle = rectangle;
            p.color = color;           
            if (function == Function.A)
            {
                PrintImg(p);
            }
            else if (function == Function.B)
            {
                SaveImg(p);
            }
            else
            {
                return;
            }
        }
        #region  功能A,B具体实现
        /// <summary>
        /// 存储输出数据
        /// </summary>
        /// <param name="p"></param>
        private void SaveImg(P p)
        {
            //默认存储在文件目录的Text.txt文本下
            FileStream fs = new FileStream(@"..\..\Text.txt", FileMode.Open, FileAccess.Write);
            System.IO.File.SetAttributes(@"..\..\Text.txt", FileAttributes.Hidden);
            StreamWriter sr = new StreamWriter(fs);
            for (int i = 0; i < p.M; i++)
            {
                for (int j = 0; j < p.N; j++)
                {
                    if (i >= p.rectangle.X && i <= (p.rectangle.X + p.rectangle.Width) && j >= p.rectangle.Y && j <= (p.rectangle.Y + p.rectangle.Height))
                    {
                        sr.Write("(" + p.color.R + "," + p.color.G + "," + p.color.B + ")");
                    }
                    else
                    {
                        sr.Write("(" + Color.White.R + "," + Color.White.G + "," + Color.White.B + ")");
                    }
                }
                sr.Write('\n');
            }   
            sr.Close();
            fs.Close();
            Console.WriteLine("写入文件成功");
        }
        /// <summary>
        /// 输出R,G,B
        /// </summary>
        /// <param name="p"></param>
        private void PrintImg(P p)
        {
            //依次循环判断画板内的元素是否落在矩阵范围
            for (int i = 0; i < p.M; i++)
            {
                for (int j = 0; j < p.N; j++)
                {
                    if (i >= p.rectangle.X && i <= (p.rectangle.X + p.rectangle.Width) && j >= p.rectangle.Y && j <= (p.rectangle.Y + p.rectangle.Height))
                    {
                        Console.Write("("+p.color.R+","+p.color.G+","+p.color.B+")");
                    }
                    else
                    {
                        Console.Write("(" + Color.White.R + "," + Color.White.G + "," + Color.White.B + ")");
                    }                   
                }
                Console.Write('\n');
            }
            
        }
#endregion
        static void Main(string[] args)
        {
            P p = new P { M = 10, N = 10 };
            Rectangle rectangle = new Rectangle(0,0,5,5);
            Draw d = new Draw();
            //A,B功能测试
            d.DrawRectangle(p, rectangle, Color.Red, Function.A);
            d.DrawRectangle(p, rectangle, Color.Red, Function.B);
            Console.ReadLine();
        }

猜你喜欢

转载自blog.csdn.net/qq_38436796/article/details/104749145