1

プログラムの目的は、値の2Dグリッドを作成することです。ユーザーからの入力として、グリッドに存在する要素の総数(たとえば、n)を取得します。n個の値の2Dグリッドを作成する必要があります(これらの値は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 = 10など、「n」の他のいくつかの偶数値の場合は失敗します。

グリッドを構築するためのより良い方法を提案できますか?

4

1 に答える 1

1

素因数分解 - 例: 所与6、発見3*2- は、現代のコンピューティングの大きな課題の 1 つです。それを行うための最も簡単でおそらく最も信頼できる方法は、反復することです。(つまり、1 で割り切れますか? 2 で割り切れますか? 3 で割り切れますか?...)

良いニュースは、とにかく反復していることです! rowlenしたがって、因数 (および)を推測してその問題を解決しようとする代わりにcollen、出力の反復を開始し、途中のすべての数値をチェックして、それが因数であるかどうかを確認します! 見つけたら、行と列の数を決める必要があります。

(疑似コード) のようなもの:

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);
}
于 2012-09-30T04:30:16.163 に答える