2015-02-22 5 views
0

Это проблема, которую я решил, но я получаю оценку нуля, когда я отправляю код. Кажется, он производит правильный вывод, когда я запускаю его на своей локальной машине. Я решил это с помощью C и Java. В случае java сервер отвечает ошибкой NZEC, причина которой также неизвестна.Интересная информация

Ввод: В первой строке содержится номер T, который представляет собой количество тестовых примеров. Следующие T строк содержат 3 целых числа X, Y и N, разделенные пробелом.

Выход: Для каждого тестового случая напечатайте N-й номер последовательности.

Constraints: 
1) 1 <= T <= 10^6 
2) 0 < N <= 50 
3) 0 < X < 50 
4) 0 <= Y < 3 

Sample Input- Sample Output- 
1    34 
3 2 7 

Вот мой код:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int array[10000], x, y, z, j; 
    long long int testcase; 
    scanf("%lld", &testcase); 

    for (long long int v = 0; v < testcase; v++) { 
    scanf("%d %d %d", &x, &y, &z); 
    *array = (int)(calloc ((z + 100), sizeof(int *))); 

    for (int i = 0; i < z + 100; i++) { 
     array[i] = 0; 
    } 
    for (j = 0; j < x; j++) { 
     array[j] = y; 
    } 
    for (int l = j; l < z; l++) { 
     array[l] = array[l - 1] + array[l - 2] + array[l - 3]; 
    } 
    printf("%d ", array[(z - 1)]); 
    } 
    return 0; 
} 

Вот мой код, написанный в java--

public class TestClass { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     long testCases = Long.parseLong(sc.nextLine()); 
     StringBuilder sb = new StringBuilder(); 
     for (long i = 0; i < testCases; i++) { 
      int x = sc.nextInt(); 
      int y = sc.nextInt(); 
      int z = sc.nextInt(); 
      int array[] = new int[z+1]; 
      long sum = 0; 
      int j; 
      for (j = 0; j < x; j++) { 
       array[j] = y; 
      } 

      for (int l = j; l < z; l++) //add for loop in case of greater j values 
      { 
       array[l] = array[l - 1] + array[l - 2] + array[l - 3]; 

      } 

      System.out.println (array[(z-1)] + " "); 
     } 

    } 


} 
+1

«' число N'th последовательности.» Какая последовательность? –

+0

Почему 'long long int testcase;'? Диапазон 'T' находится в пределах 32-битного' int'. И почему вы не проверили входные значения по их определенному диапазону и возвращаемое значение из 'calloc()'? Возможно, ** Судья ** дал входы, которые жарили его компьютер. –

+0

'* array = (int) (calloc ((z + 100), sizeof (int *)));' Это не имеет никакого смысла. –

ответ

1

массива объявим как int *array;

выделить его как array = calloc(z + 100, sizeof(int *));

освободите его в конце цикла с помощью free(array), array = NULL;

Я не знаю, является ли ваш алгоритм правильным, но способ выделения памяти является фиктивным, выделенная память не используется вообще, а вычисление ограничено размер 10000 ints. Если вы получите значение больше 9900 для T, ваш код будет демонстрировать неопределенное поведение.

0

У вас большая проблема в вашем calloc, который, возможно, не повлиял на автоматическое тестирование вашего скрипта (см. Предыдущий ответ от chqrlie). И ваш алгоритм довольно сложный: зачем инициализировать до 0, когда последующие петли перезапишут его? зачем выделять дополнительные 100 строк в вашем массиве?

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

Например, при х = 1, то заполняют массив:

array[1]=array[0]+array[-1]+array[-2]; 

, который вызывает переполнение стека.

Посмотрите внимательно на низких значениях, и, возможно, попытаться понять алгоритм как математическую задачу

Во многих случаях вы будете возвращать (2^(гх) +1) * у, за исключением, когда х = 1 или х = 2.

EDIT: кажется, после прочтения вашей более полной записи по следующей ссылке, что ваш алгоритм удовлетворяет только х = 3:

https://codereview.stackexchange.com/questions/82295/hacker-earth-challenge-number-of-interest

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