2016-01-31 4 views
0

Массив Test имеет следующее свойство:Ядро Java Практические вопросы

a[0] = a[1] + a[2] = a[3] + a[4] + a[5] = a[6] + a[7] + a[8] + a[9] = ... 

Длина массива испытаний должен быть п * (п + 1)/2 для некоторого п.

Написать метод, названный isTestArray, который возвращает 1, если его массив аргумент является массивом Test, в противном случае она возвращает 0. Функция подписи:

int isMadhavArray(int[ ] a) 

Пример:

enter image description here

Это то, что я пробовал:

public class TestArray { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    System.out.println(isTestArray(new int[] {2,1,1,4,-1,-1})); 
} 

static int isTestArray(int[] a){ 

    boolean isEq=true; 
    for(int i=0;i<a.length;i++){ 
     int n=i, value=a.length; 
     int equation=n*(n+1)/2; 
     if(value==equation) 
     { 
      for(int x=0,y=1;y<a.length;x++,y++){ 
       if(a[0]==a[x]+a[y]){ 
        //having problem over here :(
       } 
      } 
     } 
     else 
      isEq=false; 
    } 
    if(isEq) 
     return 1; 
    else 
     return 0; 

} 

+2

В чем проблема/вопрос? – ChiefTwoPencils

+0

Проблема в том, что я не мог ее решить! : P – Keith

ответ

1

Вот моя попытка вашего беспокойного внутреннего цикла. Поскольку каждый раз, когда вы выполняете цикл, вы увеличиваете количество индексов, которые нужно добавить на единицу, поэтому я думаю, что вам нужен другой вложенный цикл, подобный этому. Я знаю, что это уродливо. Не могу винить меня, я новичок.

public class TestArray { 

public static void main(String[] args) { 
    System.out.println(isTestArray(new int[] {2,1,1,4,-1,-1})); 
} 

static int isTestArray(int[] a) { 
    boolean isEq = false; 
    for(int i=0; i < a.length; i++) { 
     int n=i, value = a.length; 
     int equation= n*(n+1)/2; 
     if (value==equation) { 
      int index = 1; 
      for (int x = 1; x < a.length; x++) { 
       int total = 0; 
       for (int y = index, count = 0; count < x+1; y++, count++) { 
        if (y!= a.length) { 
         total += a[y]; 
         if (total == a[0]) 
          isEq = true; 
         else 
          isEq = false; 
         index++; 

        } 
        else 
         break; 
       } 
      } 
     } 
    } 
    if (isEq) 
     return 1; 
    else 
     return 0; 
} 
+0

Спасибо, Dummy! За ваш ответ. Но каждый раз, когда выполняется цикл inner for, значение индекса начинается с 1, вправо ??? Таким образом, свойство массива здесь не соответствует. После проверки a0 = a1 + a2 следующая итерация должна проверить, если a0 = a3 + a4 + a5. И это продолжается. Не могли бы вы проверить это. – Keith

+0

Ребята !!! Этот вопрос связан с онлайн-практическим тестированием для поступления в университет MUM. Я нахожу вопросы немного запутанными. Поэтому, если у вас есть решения для вопросов прошлого года для теста, пожалуйста, сообщите мне. Я буду очень признателен за ваш вклад. Спасибо – Keith

+0

Да, он начинается с 1, потому что вы не используете индекс 0 для добавления. Запустите его, и вы увидите. Я протестировал его, и это дало мне правильный результат. – Dummy

1

Количество элементов в сумме увеличивается на 1 в каждой части.

Вы должны сделать 2 вещи:

  1. Напишите метод, который рассчитает сумму N элементов, начиная с позиции K в массиве

  2. Increment i с числом наименьшей части в итерации

пример кода:

int portionSize = 1; // number of elements to sum 
int position = 0; // index of first element 

while (position + 2 * portionSize + 1 < array.length) { // condition for last iteration 
    if (sum(position, portionSize) != sum(position + portionSize, portionSize + 1) { 
     return false; // if not equal, return immediately 
    } 
    position += portionSize; 
    portionSize++; 
} 
+0

Спасибо AdamSkywalker за ваш ответ. Но я считаю, что ваше решение не соответствует свойству массива. a0 = a1 + a2 = a3 + a4 + a5 ... Каждый раз, когда добавляется элемент массива. Не могли бы вы проверить это. Спасибо – Keith

+0

@ Keith Я не понимаю: этот код выполняет именно эту проверку - он проверяет, если a0 = a1 + a2, то он проверяет, есть ли a1 + a2 = a3 + a4 + a5 и т. Д. – AdamSkywalker

+0

Фактически, он возвращает 1, если элементы массива удовлетворяют свойству TestArray. Например. a [0] должно быть равно [1] + a [2], должно быть равно [3] + a [4] + a [5].аналогично, каждый раз, когда массив добавляется, и он должен быть равен [0] – Keith

0
public class TestArray { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     System.out.println(isTestArray(new int[] {2,1,1})); 
     System.out.println(isTestArray(new int[] {3, 1, 2, 3, 0})); 
    } 

    static int isTestArray(int[] a){ 

     boolean isEq=false, isEx=false; 
     int equation=0,value=a.length; 
    //for equation check   
     for(int n=0;n<value;n++){ 
      equation=n*(n+1)/2; 
      if(value==equation){ 
       isEx=true; 
       break; 
      } 
     } 
    //if equation is true  
     if(isEx) 
     { 
      int x=1,y=3,c=0,sum=0; 
      do{ 
       for(int I=x,J=y;I<J;I++){ 
        sum=sum+a[I]; 
       } 
       if(a[0]==sum){ 
        isEq=true; 
        sum=0; 
       } 
       else{ 
        isEq=false; 
        break; 
       }      
       c++; 
       x=y; 
       y=x+2+c; 
      }while(x<a.length); 
     } 
    //last operation of return 
     if(isEq) 
      return 1; 
     else 
      return 0; 

    } 
    } 
+0

Этот код также отлично работает !!! Ответ Дамми также верен. В качестве ответа можно использовать любой из кодов. – Keith

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