布尔函数提供的结果不正确

时间:2017-08-14 11:06:00

标签: c# class foreach boolean

我正在尝试解决关于CodinGame的练习之一。我以为我写了一个正确的代码,但结果很奇怪。

  

一代星舰正朝着人类的新家园前进:   天空的边缘。这个系外行星距离我们还有几个光年   将持续几个世纪,并看到多代船员   为人类太阳系外出生,复制和死亡   扩张。您的目标是确定哪些预期寿命   最适合与至少200名定居者一起到达Sky's Edge,而   避免船舶过度拥挤。

     

这个旅程将持续Y年,有一个可变的起始组   人,在最大容量为C的星舰上。每个成员   探险将具有完全相同的预期寿命。

     

每年,这些修改都将按照给定的顺序进行:1    - 每个船员都会变老一年。 2 - 超过预期寿命的每名船员都将死亡。 3 - 每批10名船员   年龄在20岁到预期寿命一半的成员(四舍五入   婴儿出生,将一名0岁的人加入船员。   这些限制是包容性的。

     

如果人数超过船舶容量C,人口过剩   导致内战导致船舶毁坏。该   如果至少有200人到达Sky,探险被认为是成功的   旅行Y年后的边缘。

     

您的目标是提供最低和最高的预期寿命   为了成功进行探险。总有至少一个   有效的预期寿命。

经过一番思考后我写了这个布尔函数:

public static Boolean UpdateYear(int EXP)
{
    for (int i=0; i<Y; i++)
    {
        // AGING
        foreach (People person in Populace)
        {
            if (person.age != 10000)
                person.age++;
        }

        // DEATH
        foreach (People person in Populace)
        {
            if (person.age>=EXP)
            {
                person.age = 10000;
            }
        }

        // BIRTH
        int fertile = 0;

        foreach (People person in Populace)
        {
            if ((person.age>=20)&&(person.age<=EXP/2))
                fertile = fertile + person.number;
        }            

        int babies = fertile/10;
        People newBorn = new People(0, babies);
        Populace.Add(newBorn);

        new_people = 0;

        foreach (People person in Populace)
            if (person.age != 10000)
                new_people = new_people + person.number;


        total = new_people;

        if (total>=C)
            return false;


    } 
        if (total>=200)
            return true;
        else
            return false;
}

这种情况的正确答案是:&#34; true&#34;对于EXP(期望)62或63,对所有其他人都是假的。

当我尝试在Main中运行此函数一次时,它会给出正确的结果。

示例:

Console.Error.WriteLine(UpdateYear(61));

但是当我尝试运行它几次时,无论是通过复制线还是使用循环,它都没有给出正确的结果。

    for (int j=60; j<65; j++)
        Console.Error.WriteLine(UpdateYear(j));

我得到的结果是:

假 假 假 假 假

应该是: 假(60) 假(61) 真(62) 真(63) 假(64) 错(60)

1 个答案:

答案 0 :(得分:0)

您已将所有内容设为静态,因此您的人员列表中只有一个实例,但您不会尝试在连续运行之间(在循环中)重置它

这意味着当您第二次绕过循环时,仍会记住您的第一个循环操作。

也许不要让事情变得静止,或者每次循环时将所有事情重置为初始状态

对于它的价值,我认为我已经以不同的方式建模,将(非静态)Ship作为(非静态)Person的容器,我会添加和删除人员/当他们出生/死亡时从船上等,每个人都会有一个表明他们年龄的int。每年我们都会计算可行的肥沃人群,根据/ 10规则添加新人,从列表中剔除过时的人员。