2016-09-08 11 views
1

Это будет общая постановка задачи:Объяснения теста в откидном программе Заключенных стен

Заключенные убегает из тюрьмы, перепрыгивая через N стен каждый с высотой каждой стенки заданной в массиве. Он может прыгать на высоту в три метра, но после каждого прыжка он проскакивает на метры из-за некоторых неконтролируемых факторов (ветер, скользкая стена и т. Д.).

Similar problem statement mentioned here

Задача программирования дано было отладить функцию, которая включает в себя четыре параметра -

NoOfJumps(int x, int y, int N, int Height[]) 
  1. Количество метров он прыгает
  2. Количество метров он скользит вниз по стене
  3. Количество стен
  4. Высота стен в виде массива

Первый тест был для параметров - (10, 1, 1, {10})

10 Будучи метров он прыгает, 1 метр он скользит вниз, Количество стенок равно 1, и высоту стены быть 10. Сейчас:

effectiveJump = х - у = 9.

Так что ему придется прыгать в два раза, чтобы прыгать через стены. Итак, эта функция должна возвращать 2 (общее количество прыжков, необходимых для выхода).

Был еще один тест для параметров - (3, 1, 5, {20,5,12,11,3})

3 будучи метров он прыгает, 1 метр он скользит вниз, Количество стенок - 5, высота стен - 20 м, 5 м, 12 м, 11 м, 3 м. Сейчас:

effectiveJump = х - у = 2.

Мы получили выход для указанных значений параметров, как 24

NoOfJumps(3, 1, 5, {20,5,12,11,3})

Я не могу понять, как этот выход значение получается. Как точно расположены стены?

я могу думать только одно решение для углового случая, т.е. когда человек прыгает через стену

(when (x) > remaining height of the wall),

он не должен скользить вниз еще я не могу получить требуемое решение. Например, во втором испытательном стенде на первой стене, когда человек находится на высоте 18 м, и он прыгает с высоты 3 м до 21 м и не сползает, когда он пересек эту стену. Затем он начинает прыгать с 21, а не на 20.Последовательность прыжков будет следующей:

0-> 2-> 4-> 6-> 8-> 10-> 12-> 14-> 16-> 18-> 21-> 23-> 26-> 28-> 30-> 32-> 34-> 36-> 39-> 41-> 43-> 45-> 47-> 50-> 53

Предполагая стены на высоте 20, 25, 37, 48 , 51.

Является ли это правильным предположением для решения проблемы?

+0

У вас есть информация? функция-отладка может быть ошибочной. ... или тесты .... – Jakumi

+0

Нам пришлось отлаживать функцию и передавать ей тестовые примеры (больше тестовых случаев может быть скрыто). После тестирования и компиляции я мог видеть ожидаемый результат и мой вывод для второго тестового примера. Ожидаемый результат был для этого 24. В функции отладки нам был предоставлен следующий код: 'totalJump + = wallHeight [i]/effectiveJump' (первоначально это было' totalJump = + wallHeight [i]/effectiveJump') – Sitansu

+0

wallHeight относится к массиву, содержащему высоты стена. totalJump был увеличен для каждой итерации цикла, который выполнялся 5 раз (без стенок) – Sitansu

ответ

1

С кода на данном случае 2, будет работать для случая 1 об изменении параметров (10,1,1,10).

#include<conio.h> 
#include<stdio.h> 
int jump(int x,int y,int n,int z[]); 
int jump(int x,int y,int n,int z[]) 
{ 
    int i, j, countjump, total = 0, extra = 0; 
    clrscr(); 
    printf("\n%d\n", n); 
    for (i = 0; i < n; i++) { 
     printf("\n%d", z[i]); 
    } 
    printf("\n"); 
    for (j = 0; j < n; j++) { 
     countjump = 1; 
     z[j] = z[j] + (extra) - x; 
     while (z[j] >= 0) { 
      z[j] = z[j] + y; 
      z[j] = z[j] - x; 
      countjump = countjump + 1; 
      if (z[j] < 0) { 
       extra = z[j]; 
      } 
     } 
     total = (countjump + total); 
    } 
    return total; 
} 
void main() 
{ 
    int res, manjump = 3, slip = 1, nwalls = 5; 
    int wallheights[] = {20, 5, 12, 11, 3}; 
    clrscr(); 
    res = jump(manjump, slip, nwalls, wallheights); 
    printf("\n\ntotal jumps:%d", res); 
    getch(); 
} 
+1

Это хорошо работает. Похоже, вы предполагаете, что стены будут вертикальными, как я. – Sitansu

0

Вы можете использовать этот.

Пример кода

public static int calculateJumps(int X, int Y, int height[]) { 
    int tn=0,n; 
    for(int i=0; i<height.length; i++) { 
     if(height[i]<=X) { 
      tn+=1; 
      continue; 
     } 
     n=((height[i]-X)/(X-Y)); 
     n+=height[i]-((X-Y)*n)==X?1:2; 
     tn+=n; 
    } 
    return tn; 
} 

Вам необходимо пройти только X, Y и Array, чем вы можете получить вам выход.

+0

Ваш код работает для второго тестового примера. Но не для первого, где задана только одна стена с высотой 10. Там показано, что результат будет равен 2. Вышеприведенный код даст результат 1. Также вы могли бы объяснить инструкцию, в которой n увеличивается на 1 или 2 в зависимости от требуемого условия? – Sitansu

0

Попробуйте

Вам не требуется количество стен, как он равен размеру массива

public class Jump { 
    public static void main(String[] a) { 
     int jump = 3; 
     int slip = 1; 
     int[] hights = {20,5,12,11,3}; 

     int count = 0; 
     for (int hight : hights) { 
      int temp = hight - jump; 
      if (temp >= 0) { 
       count = count + temp/(jump - slip)+1; 
      } 
      if (temp % (jump - slip) > 0) { 
       count++; 
      } 
     } 
     System.out.println(count); 
    } 
} 
+0

Пожалуйста, рассмотрите первый тестовый корпус, где есть только одна стена для прыжка 10 м, а промашка - 1 м. Код дает для него вывод 1. Он должен отображать 2. – Sitansu

+0

Он прыгнет на 10 м и пересечет стену в первом прыжке. Он не проскользнет :) –

+0

Вот что я тоже подумал. Но, как я уже сказал, в разделе комментариев на вопрос: «Его задавали как вопрос для квалификационного раунда хорошо зарекомендовавшей себя компании. Думаю, они могли бы проверить это, прежде чем задать нам этот вопрос». Они дали два теста. Нам нужно было выполнить эту функцию. – Sitansu

0

Попробуйте этот код. Может не быть оптимизированы

$ input1 = Перейти Высота

$ input2 = пробуксовку

$ вход = Массив стен высотой

function GetJumpCount($input1,$input2,$input3) 
{ 
    $jumps = 0; 
    $wallsCrossed = 0; 
    while($wallsCrossed != count($input3)){ 
     $jumps++; 
     $input3[$wallsCrossed] = $input3[$wallsCrossed] - $input1; 
     if($input3[$wallsCrossed] > 0){ 
      $input3[$wallsCrossed] = $input3[$wallsCrossed] + $input2; 
     }else{ 
      $wallsCrossed++; 
     } 
    } 
    return $jumps; 
} 
+0

Вы не тестируете первый случай. Количество скачков будет 1 (а не 2 по мере необходимости) для кода, написанного в этом случае. Я объяснил оба теста. Вам не нужно предоставлять мне решение. Я просто хочу знать, подходит ли мой подход. – Sitansu

+0

Вы не пробовали код. Пожалуйста, сделайте это сначала ** echo GetJumpCount (10,1, [10]); ** – Gaurav112

+0

Как я уже говорил выше, я снова объясняю. Количество прыжков, возвращаемых этим утверждением: ** echo GetJumpCount (10,1, [10]) ** ** должно быть 2 ** и ** не 1. ** Очевидно, ваше решение дает ** вывод 1 * * Это не то, о чем я упоминал в объяснении проблемы. – Sitansu

0

стены приходят один за другим. После прыжковой стены одна позиция должна начинаться с нуля, а не с последней высоты прыжка. Для первого случая выход должен быть действительно равным 1, так как высота и скачок одинаковы. Во втором тестовом случае 24 является правильным выходом. Я видел тот же самый вопрос на конкурсе techgig. Для первого тестового случая выход должен быть равен 1. Тест-драйв был объяснен самим собой, когда нет скольжения, если скачок и высота одинаковы.

+0

Я вижу. Но в нашем случае тестовый пример был четко упомянут с выходом 2, и это также объяснялось как это было бы проскальзывание, и это был бы скачок. – Sitansu

0

проверить, если это решит вашу проблему

def GetJumpCount(jump, slips, walls): 
     """ 
     @jump:int, Height of 1 jump 
     @slips:int, height of slip 
     @walls:array, height of walls 
     """ 
     jumps = [] 
     for wall_height in walls: 
       wall_jump = 1 
       wall_height -= jump 
       while wall_height > 0: 
         wall_height += slips 
         wall_height -= jump 
         wall_jump += 1 
       jumps.append(wall_jump) 
     return sum(jumps) 
0

Логика здесь Plz проверить, если это решит вашу проблему.

package puzeels; 

public class Jump 
{ 
    int jump=6; 
    int slip=1; 
    int numberOfWals=4; 
    int height[] ={21,16,10,5}; 

    static int count=0; 
    int wallheight=0; 

    private int findJump() 
    { 
     for(int i=0;i<height.length;i++) 
     {    
      wallheight=height[i]; 
      while((wallheight>0)) 
      { 
       count=count+1; 
       wallheight=wallheight-(jump-slip); 
       System.out.println(wallheight+" "+count); 
      } 
      System.out.println("Out of while loop"); 
     } 
     return count; 
    } 
    public static void main(String arr[]) 
    { 
     Jump obj = new Jump(); 
     int countOfJumps=obj.findJump(); 

     System.out.println("number of jumps is==> "+countOfJumps); 
    } 
} 
+0

Это дает выход 27 вместо 24 для 2-го теста. – Sitansu

 Смежные вопросы

  • Нет связанных вопросов^_^