制作模式的输出并没有像预期的那样出现?

时间:2015-12-03 13:54:32

标签: java arrays

  

给定n作为n>=0的输入,创建一个模式为{1,1,2,1,2,3,… 1,2,3..n}的数组。

我的方法

我创建了一个存在的模式,并将该模式​​存储在数组中。我在这里很困惑如何指定数组的大小。但当我设法删除某些额外的0时,我得到空输出

public int[] create(int num) {
    int k=0;
    int x[]=new int[10];   //I was confused here how much size? 
    for(int i=1;i<=num;i++) {
        for(int j=1;j<i+1;j++) {
            x[k++]=j;
        }  
    }    
    return x;  
}  

要删除零,我编写了以下代码。

int g=0;
for(int i=0;x[i]!=0;i++) {
    count++;
}
x=new int[count];
for(int p=1;p<=num;p++) {
    for(int q=1;q<p+1;q++) {
        x[g++]=q;
    }  
}   

我的问题:我没有得到预期的输出。我应该为此创建一个新数组吗?

Parameters       Actual Output           Expected Output

'3'               {1,1,2,1,2,3,0,0,0,0} {1,1,2,1,2,3}

1 个答案:

答案 0 :(得分:1)

让我们尝试计算结果数组的大小:

{1,1,2,1,2,3,...,1,2,3,..,n}

所以n元素的末尾(1,2,3,..,n)前面有n-1个元素(1,2,3,..,n-1)等,直到有一个元素为止。因此,元素总数为n + (n-1) + (n-2) + ... + 1which is n*(n+1)/2

现在让我们尝试一种简单的算法来生成想要的数组。我们可以看到,数组由n个子数组组成,其中第一个是{1},第二个是{1,2},...,最后一个是{1,2,...,n}:< / p>

  • 对于从0到n排除的每个值(这将对应于n子阵列)
  • 我们需要填充从1到n的值数组。

示例代码:

public static void main(String[] args) {
    int n = 3;

    int[] result = new int[n*(n+1)/2];
    int index = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            result[index++] = j + 1;
        }
    }

    System.out.println(Arrays.toString(result));
}