📜  拼图 |从计算机网络中清除病毒

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

拼图 |从计算机网络中清除病毒

在无限多计算机的网络中,有 650 台计算机感染了某种病毒。 IT 支持团队可以访问五种不同类型的防病毒软件包(我们称它们为 A、B、C、D 和 E),它们可以用于消除这种病毒。当应用“X”时,如果网络中至少有 X r个受病毒感染的计算机,则每个防病毒软件包“X”都可以从 X r个受感染的计算机中清除病毒。但这会导致网络中X的无病毒计算机感染病毒。

杀毒软件包的详细信息如下所示:

Antivirus SoftwareXrXnew
A254
B140
C815
D3218
E501

任何防病毒软件包都可以按任何顺序多次使用。但是,不能同时应用两个杀毒软件包。使用防病毒软件包 A、B、C、D 和 E 可以使网络摆脱这种病毒吗?如果是,包裹的顺序是什么,如果不是,为什么?

回答:
不。

解决方案:
观察到杀毒软件包在网络上应用时,分别有效清除了21、14、-7、14、49的病毒。 (-7 表示 7 台新的无病毒计算机感染了病毒)。受病毒感染的计算机中所有这些有效更改的数量除以 7 时的余数为零。

因此,无论有多少应用了多少次,它们都不会改变被病毒感染系统总数除以 7 的余数。但最初有 650 台被感染的计算机,即 6 模 7。所以,在任意使用A、B、C、D、E中的任意一个,以任意顺序使用,网络中被感染计算机的总数除以7后的余数不变为6。

示例:最初存在 650 台受病毒感染的计算机。除以 7 = 6 时的初始余数
应用 A。 25 人将无病毒,但 4 人被感染。因此,总共存在 629 (650-25+4) 台受病毒感染的计算机。当 629 除以 7 = 6 时的余数。所以,继续。

In short :
  ( 650 - 7 * some_number ) % 7  = 650 % 7 -(7 * some_number)%7 = 6 - 0 = 6 

Hence , we cannot make the difference to zero in any case 
 

这个问题和解决方案基于“不变性原理”。

当事情(看似)不断变化时,寻找哪些核心价值观(尽管隐藏)没有变化。

请注意,“但是,不能同时应用两个防病毒软件包。 ” 严格来说不是必需的。即使我们同时应用其中一个或多个,其余逻辑仍然相同。但它是为了确保在应用所有软件包时我们不需要寻找最少 (A+B+...) 受感染的计算机。