java - 给定一个数字,构建一个二维网格的程序

标签 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),则会失败。

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

最佳答案

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);
}

关于java - 给定一个数字,构建一个二维网格的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658599/

相关文章:

java - 使用java在elasticsearch查询中设置索引类型

javascript - 将国家代码转换为国家全名

javascript - 如何将 CSS 属性设置为 if 语句中的条件?

java - 确定字符串是否具有所有唯一字符

arrays - 数组中的最大差异未通过 HackerRank 中的所有测试用例

javascript - 网格内的多个单元格编辑

html - pure-u-1-7 与 sm、md、lg、xl 结合使用时不起作用

java - 如何处理与 jackson hibernate 的双向一对一关系

java - 第一次调用后视角为空

java - 指定 main 方法接受的参数类型的目的是什么?