📜  门| GATE-CS-2009 |问题 17(1)

📅  最后修改于: 2023-12-03 14:58:28.251000             🧑  作者: Mango

问题17
描述

考虑以下程序段:

void f(int n) {
    if(n%2 != 0)
        throw new RuntimeException("N must be even");
    int[] a = new int[n];
    for(int i=0; i<n; i++)
        a[i] = i;
    int[] b = new int[n];
    for(int j=0; j<n/2; j++)
        b[j] = a[j] / (j+1);
    for(int k=0; k<n; k++)
        System.out.print(b[k] + " ");
}
问题

考虑给定的整数 n,程序段 f(n) 的输出是什么?

返回整数数组 b 的元素,用空格分隔。

解答

给定一个整数 n,程序段会执行以下步骤:

  1. 如果 n 是奇数,则抛出运行时异常 "N must be even"。
  2. 创建一个长度为 n 的整型数组 a
  3. 使用循环为数组 a 的每个元素赋值,值为其索引值。
  4. 创建一个长度为 n 的整型数组 b
  5. 使用循环将 a 数组中的元素除以 (j+1) 赋值给 b 数组的前 n/2 个元素。
  6. 使用循环打印输出数组 b 的每个元素,以空格分隔。

由于 b 数组初始化的长度为 n,而只有前 n/2 个元素有有效值,因此最后输出的数组 b 的长度仍然为 n

所以程序段 f(n) 的输出是 b 数组的元素,共 n 个,用空格分隔。

示例

对于输入 n = 6,程序段的输出为:

0 0 1 1 1 3

对于输入 n = 7,程序段会抛出运行时异常 "N must be even"。