感兴趣的数量

时间:2015-02-22 20:55:02

标签: java c arrays data-structures runtime-error

这是我已经解决的挑战,但是当我提交代码时,得分为零。当我在本地机器上运行时,它似乎产生正确的输出。我用C和Java解决了它。在java的情况下,服务器响应NZEC错误,其原因也是未知的。

输入: 第一行包含一个数字T,它是测试用例的数量。 接下来的T行包含3个整数XYN,以单个空格分隔。

输出: 对于每个测试用例,打印序列的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)] + " ");
        }

    }


}

2 个答案:

答案 0 :(得分:1)

将数组声明为int *array;

将其分配为array = calloc(z + 100, sizeof(int *));

使用free(array), array = NULL;

在循环结束时释放它

我不知道你的算法是否正确,但是你分配内存的方式是假的,分配的内存根本就没用过,计算的大小只有10000英寸。如果您为T获得的值大于9900,则代码将显示未定义的行为。

答案 1 :(得分:0)

你的calloc中存在一个很大的问题,可能没有影响脚本的自动测试(参见chqrlie的上一个答案)。你的算法非常复杂:为什么在下一个循环覆盖它时初始化为0?为什么要在数组中分配额外的100行?

此外,您的代码存在z值较低的问题。

例如,如果x = 1,则填充数组:

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

导致堆栈溢出。

仔细查看低值,并尝试将算法理解为数学问题

在许多情况下,除非x = 1或x = 2,否则您将返回(2 ^(z-x)+1)* y。

编辑:看完您在以下链接上的更完整的帖子后,您的算法只满足x = 3:

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