#java #arrays #while-loop #count
Вопрос:
В качестве домашнего задания я должен был найти минимальное количество шагов, необходимых для достижения последнего значения в массиве, предполагая, что каждый шаг может быть не более 50.
Итак, я сделал это :
import java.util.*;
class RabbitJumps {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter the number of rocks: ");
int size = sc.nextInt();
System.out.print("Enter locations of " size " rocks: ");
int[] rocks = new int[size];
for (int i = 0; i<size; i ) {
rocks[i] = sc.nextInt();
}
if (countJumps(rocks)==-1) {
System.out.println("Impossible");
} else {
System.out.println(countJumps(rocks) " jumps");
}
}
public static int countJumps(int[] rocks) {
for (int i = 0; i<rocks.length-1; i ) {
if (rocks[i 1]-rocks[i]>50) {
return -1;
}
}
int count = 0;
int distjumped = 0;
while (distjumped < rocks[rocks.length-1]) {
int whichrock = nextStep(rocks);
distjumped = rocks[whichrock];
adjustArray(rocks, whichrock);
count ;
System.out.println("count = " count); //check
}
return count;
}
public static int nextStep(int[] rocks) {
int dist = 0;
int whichrock = 0;
for (int i = 0; i<rocks.length; i ) {
if (rocks[i]>dist amp;amp; rocks[i]<=50) {
dist=rocks[i];
whichrock = i;
System.out.println(dist); // check
}
}
System.out.println("whichrock = " whichrock); //check
return whichrock;
}
public static void adjustArray(int[] rocks, int whichrock) {
int dist = rocks[whichrock];
for (int i = 0; i<rocks.length; i ) {
rocks[i]-=dist;
}
for (int i = 0; i<=whichrock; i ) {
rocks[i]=0;
}
}
}
Я не совсем понимаю, почему граф такой странный? вот так: я не уверен, почему счет снова начинается с 1 на полпути. Это происходит и с другими входными данными 🙁
Был бы признателен за некоторую помощь!! спасибо, ребята!!
Комментарии:
1. Ты звонишь
countJumps
дваждыmain()
. Один раз для тестированияif (countJumps(rocks)==-1)
и один раз вelse
случае, если этот тест не пройдет вSystem.out.println(countJumps(rocks) " jumps");
2. подождите, но как это приведет к тому, что «количество» в методе countJumps вернется к 1? например, если я введу 11; 30 70 75 120 160 170 180 190 200 246 258, это будет проходить гладко и считать до 4, но все начинается с 30 в 5-м раунде, и счет возвращается к 1? @JohnnyMopp
3. Поскольку вы изменяете исходный список
rocks
входящихadjustArray()
, поэтому во 2-й раз, когда вы звонитеcountJumps()
, это другие данные.4. Ооо, это заняло довольно много времени, но, думаю, теперь я понял… спасибо!! @JohnnyMopp