Учитывая число, программа для построения двумерной сетки
Целью программы является создание двумерной сетки значений. Мы получаем общее количество элементов, присутствующих в сетке, как ввод от пользователя (скажем, 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 ответ
Первичная факторизация - например: дано 6
, находя 3*2
- это одна из самых больших проблем современных вычислений. Самый простой и, вероятно, самый надежный способ сделать это - просто выполнить итерацию. (т. е. делится на 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);
}