我对求职面试中问过的一个问题有想法。
问题是:
“请编写满足以下条件的函数,当用户输入该值时。该值将被除以5”,如果该值将被除以15,该函数将仅返回“该值将被除到15“,如果该值将被划分为非3个条件,系统将返回”该值将不被划分为3/5/15“
我想,我首先检查了数字是否可以除以15,然后除以5,最后除以3。但是我认为这并不那么容易。当我将整数除以15的规则时,我发现每个可以被3和5完全除的数可以被15除。
我认为,我编写了以下代码:
if (a % 15 == 0) { Console.WriteLine("the value will be divided to 15"); }
else if (a % 5 == 0) { Console.WriteLine("the value will be divided to 5"); }
else if (a % 3 == 0) { Console.WriteLine("the value will be divided to 3"); }
else { Console.WriteLine("the value will be divided to nothing"); }
我认为这是关于15的除数规则的把戏,但我找不到它。
答案 0 :(得分:2)
该规则有效。我们说如果存在整数n
,则15将数字q
除以
15q = n
我们称q
为见证人,是15除以n
的事实。
由于我们可以将15
分解为3 * 5
或5 * 3
,所以相当于说
(3*5)q = n
(5*3)q = n
如果整数乘法是关联的,则与
相同3(5*q) = n
5(3*q) = n
3、5和q
中的所有三个都是整数,这意味着5*q
是n
被3除数的见证者,而3*q
是证明n
被5除。
现在,假设15个 not 不除n
。这意味着没有证人q
。如果3除以n
,我们知道存在q
这样的3q = n
。我们还知道5不除q
,否则将有一些p
使得3*(5*p) = n
和p
成为15个做< / em>除n
。如果5除n
,则类似的论点成立。因此,如果您已经证明15不会除n
,那么3和5中最多一个也可以除n
。
答案 1 :(得分:0)
有另一种解决问题的方法:计算数字的greatest common divisor (GCD)和15。这样可以减少需要执行的除法次数,以及reduces the amount of duplicated code。
代码如下:
int gcd = 1;
if (a % 3 == 0) { gcd *= 3; }
if (a % 5 == 0) { gcd *= 5; }
if (gcd != 1) { Console.WriteLine("the value will be divided to " + gcd); }
else { Console.WriteLine("the value will be divided to nothing"); }
通过编写适当的GCD函数,这也可以扩展到许多主要因素。