📌  相关文章
📜  针对在职专业人员的三星软件能力测试 (SWC)

📅  最后修改于: 2022-05-13 01:58:12.571000             🧑  作者: Mango

针对在职专业人员的三星软件能力测试 (SWC)

三星研发团队招聘的三星软件能力测试——2019 年 9 月
SWC 测试有 2 种类型:
1. 对于学生
2. 对于工作专业人士

两个测试之间的区别在于,对于学生,将显示测试用例的结果。
而对于工作的专业人员,测试用例结果将被隐藏。这意味着您无法知道您的代码是否有效。

需要注意的要点:(这些也会在考试前由 HR 向您介绍,但事先了解这些要点会有所帮助)
1. 将有 1 个问题需要在 4 小时内解决。
2. 将有50个隐藏测试用例,全部通过才能被选中。
是的,您的代码必须通过所有 50 个测试用例才能通过 SWC 测试。
对于工作的专业人士,您将不知道您的代码是否通过了所有 50 个测试用例,并且您的最终提交将被考虑在内。
此外,如果进行测试的 HR 看到您的提交已通过所有 50 个测试用例,她可能会要求您停止测试。这样你就不会失去被选中的机会。
3. 提交次数上限为 10 次。您的代码提交次数不能超过 10 次。但是您可以在 SWC 软件中多次编译和测试,或者使用 Eclipse 和 Visual Studio 来编译和测试您的代码。
4. 一个样本测试用例将提供输入和预期输出。
5. 不允许使用任何库函数,如 ArrayList、Stack、Queue、Map、Set 等。不允许使用 STL。我们必须只使用数组来完成我们的代码。我们无法导入任何包。将要导入的唯一包是用于获取输入的Java.util.Scanner。
6. 只能使用扫描仪进行输入。 Java中也不允许使用 BufferedReader。
7. 允许的语言只有 C、C++ 和Java 。 Python, C# 是不允许的。
8、我们一生最多可以尝试3次SWC测试。因此,如果您认真加入三星研发,请不要浪费您的尝试。

对于在职专业人士:要参加此测试,我们需要在 HackerEarth、Codechef 等各种编码平台上举办的任何三星招聘挑战赛中取得高于分界线的分数。编码平台中的挑战只是通往此 SWC 测试的门户。此 SWC 测试是招聘过程中的主要组成部分。根据 HR,如果您通过此 SWC 测试,则完成 65% 的招聘流程。这是为了招聘三星研发团队。

问题

输入:给定 T 个测试用例。

对于每个测试用例,给出 k。 k 是成分的数量。

在 k 之后,有 k 行。每行有 3 个数字。它们代表第 k 个成分中的蛋白质、脂肪和碳水化合物含量。

在这 k 行之后,给出了 3 行。每行有 3 个数字。它们代表蛋白质、脂肪和碳水化合物。对于这 3 个目标,我们需要找出要添加的成分才能与目标完全匹配。

输出:对于每个测试用例中的 3 行,打印空格分隔的数字,表示要添加的成分以获得完全匹配。
成分必须按排序顺序打印。如果有很多组合,请打印最少成分数量的组合。

样本输入/输出:

1 //测试用例
5 // 5 种成分
1 2 3 //第一种成分
4 5 6 //第二个..
7 8 9
9 18 12
5 7 9 //第 5 种成分
5 7 9 //第一个目标
11 13 15 //第二个目标
52 14 3 // 第三个目标

预期输出:

5
2 3
-1

注意:-1,当没有找到组合时

我的方法:我使用了贪婪的方法。

首先,我添加了每种成分中的所有 PFC 值,并将其存储在一个称为 sum 的二维数组及其索引(成分编号)中。

总和[k][2]
6 1
15 2
24 3
39 4
21 5

然后我在每个目标中添加 PFC 值并将其存储在变量 sumTarget 中。

总目标[3]
21
39
69

现在我将 sum 数组与成分编号一起按降序排序。请注意,我们不能使用排序功能。因此,学习排序算法是很有帮助的。就我而言,我实现了快速排序。

排序总和[k][2]
39 4
23 3
21 5
15 2
6 1

我定义了一个总变量,它不断添加排序和数组中的数字。如果总数小于 sumTarget,则添加下一个数字。如果它大于减去添加的数字并迭代以添加下一个数字。

继续此过程,直到找到匹配项。也就是说,如果 sumTarget 等于 total。一旦相等,还要检查相应的 PFC 值是否与正确的目标值相加。如果是,则打印成分。如果没有成分与目标匹配,则打印零。

虽然我通过了示例测试用例,但不幸的是我无法通过测试。

考后分析:为了对sum数组进行排序,我实现了快速排序。事实证明这是一个错误的决定。以下输入可能会根据我的程序打印不同的输出。
让我们假设我的排序数组以及成分编号如下:
24 4
13 3
13 5
13 2
6 0
7 1
对于 sumTarget = 37,我的算法将选择成分 4 和 3。根据不同的排序算法,我们可以选择 4、5 或 4、2。
我在问题中没有发现的是,如果有不止一种可能的成分组合,我们必须打印哪种组合?
(也许是成分数最少的那些?)
如果总和值相同以获得最少的成分编号,也许我也应该对成分编号进行排序,如下所示:

24 4
13 2
13 3
13 5
6 0
7 1

现在,我的算法会选择 4 和 2。此外,我应该收集所有可能组合的列表,并选择具有最少数量成分的组合。 (虽然我无法在问题中清楚地找到这一点)

我花了 3.5 小时为此编写了整个工作代码。我浪费了最后 30 分钟,没有考虑上述各种情况。因此,请使用整个 4 小时来优化您的代码,直到最后。如果任何提交通过,HR 将在几分钟内通知您。

祝所有参加这次考试的人好运。