顺序搜索Java

顺序搜索Java,java,algorithm,Java,Algorithm,我在顺序搜索方面有问题,以下是练习: 您正在测试一种砖块的物理耐力。该测试旨在找出砖块在不从和N层建筑断裂的情况下可以掉落的最大高度。您有k砖和两个箱子: 案例1。当k=1时,尝试从当前楼层开始,依次向上,直到砖块断裂 案例2。当k>1时,一块砖块从N/2楼层掉落。如果断裂,则案例2将再次应用于楼层1和N/2-1之间。如果砖块未断裂,则在N/2+1和N层之间再次应用案例2 我对案例1的原因有问题,因为我不知道如何处理: 最初您称为dropBricks(k,1,N);由用户(键盘)引入的k和N d

我在顺序搜索方面有问题,以下是练习:

您正在测试一种砖块的物理耐力。该测试旨在找出砖块在不从和N层建筑断裂的情况下可以掉落的最大高度。您有k砖和两个箱子:

案例1。当k=1时,尝试从当前楼层开始,依次向上,直到砖块断裂

案例2。当k>1时,一块砖块从N/2楼层掉落。如果断裂,则案例2将再次应用于楼层1和N/2-1之间。如果砖块未断裂,则在N/2+1和N层之间再次应用案例2

我对案例1的原因有问题,因为我不知道如何处理:

最初您称为dropBricks(k,1,N);由用户(键盘)引入的k和N

dropBricks接收k(剩余砖块的数量,第一层(第一层),最后一层(最后一层=N)),输出为breakingFloor

公共静态int-dropBricks(int k,int-first,int-last){
int结果=0;
如果(k==1){//情况1
//我知道这个代码是错的,就是不能把它空着
做{
滴水砖(k,第一个,最后一个);
第一++;
}而(首层);;
System.out.println(“地板砖破裂”+地板);
}else{//案例2

如果(last first你的问题——或者至少其中一个问题——是每次你绕过这个循环

do{
    dropBricks(k,first,last);
    first++;
} while( breakingFloor(first) );
…您正在选择一个新的随机楼层,它将在该楼层断开(发生在
breakingFloor
方法中):

这肯定会给你带来非常不一致的行为。它实际上可能会在某些时候侥幸奏效

您希望选择它在开始时将断裂的楼层,并使其保持不变


测试应用程序的一个明智的方法可能是先硬编码一个突破性的底线,然后再引入随机性。

你的问题——或者至少是其中一个问题——是每次你绕过这个循环

do{
    dropBricks(k,first,last);
    first++;
} while( breakingFloor(first) );
…您正在选择一个新的随机楼层,它将在该楼层断开(发生在
breakingFloor
方法中):

这肯定会给你带来非常不一致的行为。它实际上可能会在某些时候侥幸奏效

您希望选择它在开始时将断裂的楼层,并使其保持不变

测试应用程序的一种明智方法可能是先硬编码一个突破性的底线,然后在以后引入随机性。

您的第一个问题是:

int breakingFloor= r.nextInt(floor)+1;
这根本没有道理。砖块将断裂的楼层编号是而不是随机的

换句话说:你想给那块砖块分配一个随机数一次。然后你的算法必须找到那个数!你的代码在你的算法试图找到那个数的时候改变了那个“破楼数”。这使得整个过程毫无用处(当然还有“随机”,因为各种事情都可能发生)

因此,站在你这边的第一步是:后退一步,重新思考问题,以及“解决”问题真正需要你做什么。

你的第一个问题是:

int breakingFloor= r.nextInt(floor)+1;
这根本没有道理。砖块将断裂的楼层编号是而不是随机的

换句话说:你想给那块砖块分配一个随机数一次。然后你的算法必须找到那个数!你的代码在你的算法试图找到那个数的时候改变了那个“破楼数”。这使得整个过程毫无用处(当然还有“随机”,因为各种事情都可能发生)


因此,站在你这边的第一步是:后退一步,重新思考问题,以及“解决”问题真正需要你做的事情。

正确。楼层编号不是随机的,而是任意的。正确。楼层编号不是随机的,而是任意的。我看到你在我还在思考的时候提出了同样的想法;-)我看到你也有同样的想法;当我还在思考的时候;-)
int breakingFloor= r.nextInt(floor)+1;