自己上班期间答的机试题,写的不是很好,公司在上海。如图

2021-02-21 16:29:56 +08:00
 KomiSans

后面两张是我自己答的,在最后 txt 发给他告诉他答完了之后就没再理我,可能是已经满了,也可能是我答的太烂了

3109 次点击
所在节点    程序员
8 条回复
jworg
2021-02-21 17:44:50 +08:00
如果是我的话,这个菱形是有规律的,两个等差数列减去一个最后一项,然后个数就是 n^2+n+1<(n+1)^2,然后对于 14 就是,14 开方近似 3,最长一行在 3,个数是 2*3 -1 =5,总个数是 13,剩余 1,菱形的中心点是 ( 3,3 ),然后打印
KomiSans
2021-02-21 18:23:44 +08:00
@jworg 我这个主要是从最小的那个中间的点数开始算,一点点扩展成菱形,把数量离着给定数值最近的那个获取就好,所以点数是递增 2 的
Sunyanzi
2021-02-21 22:01:31 +08:00
第一题还挺有趣的 ... 但我没看懂你的写法 ... 我吃饱了也没事自己写了一版如下 ...

i.imgur.com/nYGhFDJ.png

打菱形的过程随便写的 ... 直觉觉得还有优化空间 ... 但不在核心算法里我就懒得做了 ...

以及最后算总量的那个 u 其实也可以套公式求 ... 但我想来想去感觉还是直接累加比较容易就累加了 ...

供参考 ...
young1lin
2021-02-21 22:08:00 +08:00
第一个好像是我记得上学的时候学 C 的时候的作业的变形版。
KomiSans
2021-02-21 22:47:24 +08:00
@Sunyanzi 神人啊,说老实话我也不大能看懂你的写法,从 f 变量就没太看明白,但是你写的代码比我简化了不少
lecher
2021-02-21 23:18:10 +08:00
不考虑解法,这三道题考察的是应届生水平。
初筛的标准可以猜测是:
1. 具备基本的 java 语法基础
2. 具备基本的 sql 查询和联表基础

可以说是很简单的题目了,考察到的知识点有这几个
1. java 的循环,双重循环,知道找规律,星号和空格的等差数列规则,知道从循环剥离计算规则和打印的处理封装估计会加分。
2. 知道查询的写法,知道 order by,知道 limit,知道子查询,知道如何优化子查询会加分
3. 知道联表的写法,知道 group by,知道子查询,知道如何优化联表会加分

大致就这些,这算是很务实的笔试题了,考察的都是基本知识点。
Sunyanzi
2021-02-21 23:21:59 +08:00
@KomiSans f 求的是初始状态左上角空格的数量 ... 即从最顶端到最长一行的距离 ...

从下面的代码也可以看到 ... 实际打印的空格数量在变量 c 里 ... 随循环逐级递减再递增 ...

f 的另一种等效的写法是 int f = 0 - (int)( 2 - Math.sqrt( 4 + 8 * ( n - 1 ) ) ) / 4 ...

个人感觉没有我现在的版本好看 ... 就没选这个写法 ...

以及神人不敢当 ... 九年义务教育学以致用而已 ...
copper20
2021-02-21 23:24:58 +08:00
第一题主要还是找规律吧,我吃饱了没事也稍微讲一下我的想法吧,思路和 @Sunyanzi 是一样的应该。

算法的核心还是在找到需要打印的菱形。

有 i + 1 行的菱形所需要的 ‘*’ 的数量是:当中哪那一行 ‘*’ 的数量 + 2 * 第一行到当中那一行 ‘*’ 数量的和,也就是 (2i+1) + (1 + 3 + ... + 2i - 1),化简一下就是 2i^2 + 2i + 1 。

所以问题就变成了求使 2i^2 + 2i + 1 <= N (i >= 0) 成立的所有 i 中最大的那一个整数。用高中知识就能知道 f(i) = 2i^2 + 2i + 1 - N 在 i >= 0, N >= 0 的时候是单调增且必有一个非负解的,所以 f(i) = 0 的那个非负解的下取整就是所求的解,也就是我们要找的菱形的行数。

接下来就是大一 C 语言课上的打印菱形了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754857

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX