【问题标题】:How to start on this C interview code test?如何开始这个 C 面试代码测试?
【发布时间】:2017-02-14 11:39:34
【问题描述】:

我在一家公司遇到了一个非常有趣的问题,但我似乎根本找不到答案。

#include <cstdio>
int main()
{
    int num = 123456789;
    int res = 0;
    for (int i = 0; i<111111111; i++)
    {
    res=(res+num)%1000000000;
    }
    printf("06 %09d", res);
    return 0;
    }

我应该声明 num,所以输出是我的手机号码,305089171。 知道该怎么做吗?

【问题讨论】:

  • 所以...您希望 res 为 305089171 而只能更改初始 num 值?
  • 你知道想要的输出是什么。你知道算法是什么。向后运行。
  • 这是一个通用的“编程逻辑问题”。是的,我希望最终输出为 305089171,只更改 num 值。我已经尝试了几个小时,但似乎找不到答案
  • @RawN #include &lt;cstdio&gt; 不符合 C.
  • @ÁdámTósaki 我说的是res=(res+num)%1000000000; 中的%%09d 确实与这个问题无关,但如果你正在接受 C/C++ 面试问题,你应该知道 %d 做了什么。

标签: c++


【解决方案1】:

所以要解决这个问题,我们从个位数开始。

  1. 我们需要 1 表示个位,因此使 num = 1。
  2. 现在我们的资源为 111111111。
  3. 现在我们需要十位数的 7。所以我们让 num = (7 - 1(步骤 2 中的十位数字)) 1 = 61。(还要注意,在十位乘以数字只会影响到它左边的数字)。
  4. 现在我们的资源为 777777771。
  5. 现在我们需要数百个位置的 1 个。所以如果我们让 num = 461(因为 7+4 = 1)
  6. 等等。

我能想到的数学推理是,当你将一个数字乘以 111111111 时,十位的数字只会影响它左边的数字,而不影响它右边的数字。

【讨论】:

  • 我认为@Treycos 使用了类似的方法。我没有足够的声誉发表评论,所以我发布了一个新答案。希望解释清楚。
【解决方案2】:

这是您需要输入 num 的值:

254197461

我是通过将额外的数字一个一个地添加到 num 来得到的,我让你自己检查会发生什么。 我对此没有数学上的解释,但是尝试将数字一个一个地放入 num 中,您可能会理解:。 1 / 61 / 461 / 7461...

【讨论】:

  • 由于我使用了肮脏的方式,请随意用数学答案完成它;)
  • 恕我直言,如果您不详细解释如何(以及为什么)获得结果,那么这个答案绝对没用。以面试官的身份来看这个,与推理和算法相比,实际数字是相当无关紧要的。
  • 这似乎是一些特殊的东西,数字只由'1'组成
  • 254197461 x 111111111 = 28244162305089171。明白了吗?
  • 等等,你如何得到一个最后 9 位数字 305089171 并且也可以被 111111111 /-ed 的数字?...
猜你喜欢
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多