首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个简单的递归问题来模拟计算机病毒的传播

一个简单的递归问题来模拟计算机病毒的传播
EN

Stack Overflow用户
提问于 2019-02-16 22:04:51
回答 2查看 412关注 0票数 0

我想解决的问题是:

  • 一种电脑病毒会在第0天感染100台电脑。
  • 每台70%的受感染计算机都会感染另一台计算机。
  • 有两位计算机科学家解决了这个问题。他们每个人都可以在第一天修复一台电脑。
  • 之后的每一天,由于他们的经验增加,他们可以修复比前一天多一倍的计算机。
  • 那么,多少台电脑在几天后还被感染呢? 从第0天到第20天,数字会是怎样的呢?

为了解决这个问题,我编写了以下代码:

代码语言:javascript
复制
#include<iostream>
#include<cmath>
using namespace std;

int computervirus(int n){ //n:Tage
    int nr_virus= 100;
    int nr_fixed;
    int rest = 0;
    if(n == 0) return 100;

    if(n <= 20){ 
        nr_virus += computervirus(n-1)*0.7;
        nr_fixed = pow(2,n);
        rest = nr_virus - nr_fixed;
    }

    return rest;

}

int main(){

    cout << endl;
    for(int i=0; i <= 20; i++){ 

        cout << "at the "<< i << " .day are still "<< computervirus(i) << " infected Computers\n" <<endl;   
    }
    return 0;
}

这个数目的输出(受感染的计算机)是不正确的,因为感染的速度肯定是更快的als修理至少前9天。我不知道问题在哪里。你能帮上忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-16 22:35:53

第n天的递归尝试使用n+1结果的70%,这将导致无限递归。你必须使用70%的第一天,它将工作。现在不是前一天的70%,而是70%,不是* 0,7,而是* 1,7

你需要考虑到电脑感染的人数不可能是负数。

最后,你高估了修理:第一天是2天,第2天是4天,但是由于第1天的第2天已经被计算在第1天的递归中,所以你推断了两次。所以你应该只计算固定日期的电脑,所以就算(2,n-1)。

修正后的代码如下所示:

代码语言:javascript
复制
int computervirus(int n){ //n:Tage
    int nr_virus= 100;
    int nr_fixed = 0;
    int rest = 0;

    if(n>0){ 
        nr_virus = computervirus(n-1)*1.7;  // n-1 not n+1
        if (n==1) 
            nr_fixed = 2;
        else nr_fixed = pow(2,n-1); 
    }
    rest = nr_virus - nr_fixed;
    if (rest<0) 
        rest = 0;
    return rest;
}

在线演示

票数 0
EN

Stack Overflow用户

发布于 2019-02-16 22:09:03

您忘了在for循环的主体上使用大括号。

代码语言:javascript
复制
int main(){

    for(int i=0; i <= 20; i++)
    { 
        cout << endl;
        cout << "at the "<< i << " .day are still "<< computervirus(i) << " infected Computers\n" <<endl;   
    }
    return 0;
}

在循环中的第一个语句之前放置一个左大括号{,在最后一个语句后面放置一个右大括号}

因为大括号只缺少第一个语句,所以cout << endl;在循环中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54728117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档