2022/9/13 某笔试复盘

选择2题,编程3题,问答2题。

题目感觉不太难,就是时间有点紧张,45分钟。

  但是,我还是凉了(尴尬而又不失礼貌的微笑.jpg)。问了一下,说是问答题答的还可以,但是选择题答得不好,wtf,我直接人傻了,选择题我都没怎么多看俩眼,直接就过了,甚至后面我都已经不记得选择题是啥了。万万没想到,是选择题。

话不多说,直接上题

选择题

我仅仅模糊的记得:

  第一道选择题考的主要是类的一些基础知识,第二道选择题是继承的一些知识,都是给一串代码,然后选答案的。

编程题:

1.按照给定的格式打印6*6的乘法口诀表(当时给懵了一下,花费了挺长时间,而且代码写的很烂,一点都不优雅)

  题目所给的格式是这样的:

  1 * 1 = 1       2 * 1 = 2       3 * 1 = 3
  1 * 2 = 2       2 * 2 = 4       3 * 2 = 6
  1 * 3 = 3       2 * 3 = 6       3 * 3 = 9
  1 * 4 = 4       2 * 4 = 8       3 * 4 = 12
  1 * 5 = 5       2 * 5 = 10      3 * 5 = 15
  1 * 6 = 6       2 * 6 = 12      3 * 6 = 18

  4 * 1 = 4       5 * 1 = 5       6 * 1 = 6
  4 * 2 = 8       5 * 2 = 10      6 * 2 = 12
  4 * 3 = 12      5 * 3 = 15      6 * 3 = 18
  4 * 4 = 16      5 * 4 = 20      6 * 4 = 24
  4 * 5 = 20      5 * 5 = 25      6 * 5 = 30
  4 * 6 = 24      5 * 6 = 30      6 * 6 = 36

我当时代码大概是这样的:

for (int i = 1; i <= 6; i++)
        {
            for (int j = 1; j <= 3; j++)
            {
                Console.Write("{0} * {1} = {2}\t", j, i, i * j);
            }
            Console.WriteLine();
        }
        Console.WriteLine();
        for (int i = 1; i <= 6; i++)
        {
            for (int j = 4; j <= 6; j++)
            {
                Console.Write("{0} * {1} = {2}\t", j, i, i * j);
            }
            Console.WriteLine();
        }

后来又想了一种做法:

        for(int i = 1; i < 13; i++)
        {
            if (i == 7)
            {
                Console.WriteLine();
            }
            for (int j = 1; j <= 3; j++)
            {
                if(i<=6)
                    Console.Write("{0} * {1} = {2}\t", j, i, i * j);
                else
                    Console.Write("{0} * {1} = {2}\t", j+3, i-6, (i-6) * (j+3));
            }
            Console.WriteLine();
        }

不过,最终,我还是不懂这一题要考什么知识。可能是编程基础吧?

 

2.这道题是让两个栈转为一个队列,要求是O(1);

 这道题都老生长谈了,然后,很快就做出来了。

我当时代码应该是这样的:

 public class MyQueue
    {
        Stack<int> inStack;
        Stack<int> outStack;

    public MyQueue()
    {
        inStack = new Stack&lt;int&gt;();
        outStack = new Stack&lt;int&gt;();
    }

    public void Push(int value)
    {
        inStack.Push(value);
    }

    public int DeQueue()
    {
        if (outStack.Count == 0 || inStack.Count == 0)
        {
            Console.WriteLine("Queue is Null");
            return -1;
        }
        while (inStack.Count &gt; 0)
        {
            outStack.Push(inStack.Pop());
        }
        return outStack.Pop();
    }
}</code></pre>




3.斐波那契数列。




也是老生常谈的话题,但是!我好久没撸算法,因为题中有时间要求,我只能草草写个递归了事,应该是没有达到题目的要求




我当时的代码:



        public int Solution(int num)
        {
            if (num < 0) return 0;
            if (num == 1 || num == 2) return 1;
            return Solution(num - 1) + Solution(num - 2);
        }



感觉好菜,只能想到最简单的方式(苦笑.jpg




这道题用动态规划,应该是比较好的一种解法:




动态规划



    public int Solution(int num)
    {
        if (num < 2) return num;
        int p = 0;
        int q = 0;
        int ans = 1;
        for (int i = 2; i <= num; i++)
        {
            q = p;
            p = ans;
            ans = p + q;
        }
        return ans;
    }



在leetcode上面我看见还有另外一种解法:



矩阵快速幂



这种解法读者自行去leetcode上看比较好,因为我自己也是一知半解的,XD




 




另,这道题还有另外一种解法,那就是直接给出数学通项公式(数学果然是最吊的!!!(破音))




(关于通项公式的定理以及证明读者请自行百度)




问答题:




一共俩道,都很简单




1.点乘和叉乘的意义。




开放性问题,自行百度




2.这个题目是给一串代码判断里面的错误的




内容就是判断foreach里增加或删除是否正确。




其实只要理解foreach底层是迭代器,就很容易理解foreach里面增删查改等操作是不是对的,实在不行,也自己写个代码,自个慢慢调试。






一年多之后的我翻博客看到这个,思索了一下,估计当时笔试面试纯粹是面一下,估计目标是KPI吧,毕竟题目过于简单,而且也无任何专业知识,几乎就是糊弄人的水平,我记得我是到公司前去面试的,甚至当时做完题,面试机会都没有,自问我当时也不是那么菜,之后找工作的兄弟们,还是要注意甄选,不要被这种恶心人的公司给打击到自己的自信。保持乐观,保持自信。


    public MyQueue()
    {
        inStack = new Stack&lt;int&gt;();
        outStack = new Stack&lt;int&gt;();
    }

    public void Push(int value)
    {
        inStack.Push(value);
    }

    public int DeQueue()
    {
        if (outStack.Count == 0 || inStack.Count == 0)
        {
            Console.WriteLine("Queue is Null");
            return -1;
        }
        while (inStack.Count &gt; 0)
        {
            outStack.Push(inStack.Pop());
        }
        return outStack.Pop();
    }
}</code></pre>
        public int Solution(int num)
        {
            if (num < 0) return 0;
            if (num == 1 || num == 2) return 1;
            return Solution(num - 1) + Solution(num - 2);
        }
    public int Solution(int num)
    {
        if (num < 2) return num;
        int p = 0;
        int q = 0;
        int ans = 1;
        for (int i = 2; i <= num; i++)
        {
            q = p;
            p = ans;
            ans = p + q;
        }
        return ans;
    }
posted @   皮卡味月亮  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示