给出一个数字,构建一个二维网格的程序

时间:2012-09-30 04:20:25

标签: java arrays grid 2d prime-factoring

该计划的目标是创建一个二维价值网格。我们得到网格中存在的元素总数作为用户的输入(例如,n)。我们需要构造一个n值的二维网格(这些值从0开始是连续的,即0,1,2,3,4,5,6..n)

For n=9,

0 1 2
3 4 5
6 7 8

For n=6,

Either,
0 1 2
3 4 5
or
0 1
2 3
4 5

以下是我迄今为止所管理的内容:

int rowlen = (sqrt(n))
int collen = (n/rowlen)
int no = 0;

for (int i = 0; i < rowlen-1) {
    for (int j = 0; j < collen-1) {

        System.out.print(no+"\t")
        no++;

    }

    System.out.println()
}

上述代码适用于完美的平方数和其他少数情况,其中'n'是偶数。 但是如果'n'是奇数并且很少有其他偶数'n'的值,例如n = 10,它就会失败。

您能否建议一种更好的构建网格的方法?

1 个答案:

答案 0 :(得分:1)

Prime factorization - for example: given 6, finding 3*2 - is one of the great challenges of modern computing.最简单,最可靠的方法就是迭代。 (即它可以被1整除吗?它可以被2整除吗?它可以被3整除吗?...)

好消息是你还在迭代!因此,不要通过猜测因子(rowlencollen)来尝试解决该问题,而是开始使用输出进行迭代,并检查沿途的每个数字,看看它是否是一个因素!一旦找到了,只有这样才能决定你将拥有多少行和列。

像(伪代码):

var n = 10;

var cols = 0;

for(var i=0; i<n; i++) {
    if(i>1 && ((cols === 0 && n%i === 0) || (cols>0 && i%cols===0))) {
        if(cols===0) { // we've found our first prime factor;
                       // this value will be used as the number of columns
            cols = i;
        }
        print("\n");
    }
    print(i);
}