Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.03.2013, 15:56
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

задачка на деление
Как поделить число на группы чисел без остачи?
Например, нужно число 22 поделить на 3 и 4 таким образом, чтоб было максимальное количество групп по 3.
Конкретно тут это будет 3*6 + 4*1

Возможно, конечно так вот, но думаю. что можно все проще сделать. Допустим, что у нас есть функция наибольших и наименших общих делителей. Можно это вообще без циклов сделать?

var n = число 
var x = число-делитель, групп которого должно быть макс количество
var y = другое число-делитель

var numX, numY -количество групп

var gr3 = 0
var ostacha = n%x

while (ostacha & trig != 0) {

trig = (ostacha + x*i)%x + (ostacha + x*i)%y 
i++

}

numY = (x*i)/y
numX = (n-numY)/x
Ответить с цитированием
  #2 (permalink)  
Старый 02.03.2013, 18:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от PashPP
Можно это вообще без циклов сделать?
Разумеется.
Как набросок...

// число 
var n = 22;
// число-делитель, групп которого должно быть макс количество
var x = 3;
// другое число-делитель
var y = 4;
// -количество групп
var nX, nY
var k = Math.floor(x / y) + ((x % y) > 0) ? 1: 0;
nX = Math.floor(n / x);
nY = n % x;
nY = Math.floor(nY / y);
if (nY==0) {
	nY=1;
	nX-=k;
};
alert(nX + '*' + x + '+' + nY + '*' + y);

Но в окончательном варианте условий будет больше...

Последний раз редактировалось ksa, 02.03.2013 в 18:06.
Ответить с цитированием
  #3 (permalink)  
Старый 02.03.2013, 18:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Вот вроде подойдет на все 100%...

// число 
var n = 22;
// число-делитель, групп которого должно быть макс количество
var x = 3;
// другое число-делитель
var y = 4;
// -количество групп
var nX = 0, nY = 0;
if (n > y) {
	var k = Math.floor(y / x);
	k += ((y % x) > 0) ? 1 : 0;
	nX = Math.floor(n / x);
	nY = n % x;
	if (nY < y ) {
		var val = Math.floor((nY + x * (k - 1)) / y);
		nX -= k - val;
		nX = (nX < 0) ? 0 : nX;
	} else {
		nY = Math.floor(nY / y);
	};
}
alert(nX + '*' + x + '+' + nY + '*' + y);
Ответить с цитированием
  #4 (permalink)  
Старый 02.03.2013, 23:23
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

хм. хотя не всегда срабатывает. И можно немного комментариев, пожалуйста. Что это за k и val

// число 
var n = 678867;
// число-делитель, групп которого должно быть макс количество
var x = 767;
// другое число-делитель
var y = 6776;
// -количество групп
var nX = 0, nY = 0;
if (n > y) {
	var k = Math.floor(y / x);
	k += ((y % x) > 0) ? 1 : 0;
	nX = Math.floor(n / x);
	nY = n % x;
	if (nY < y ) {
		var val = Math.floor((nY + x * (k - 1)) / y);
		nX -= k - val;
		nX = (nX < 0) ? 0 : nX;
	} else {
		nY = Math.floor(к / y);
	};
}
alert(nX + '*' + x + '+' + nY + '*' + y + ' -- '+ (nX*x+nY*y));
Ответить с цитированием
  #5 (permalink)  
Старый 02.03.2013, 23:49
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

PashPP,
Где то по форуму был код от Дзен-Нагуалист с поиском наименьших общих делителей, далее ток разбить на нужное число слагаемых

Последний раз редактировалось Deff, 03.03.2013 в 00:19.
Ответить с цитированием
  #6 (permalink)  
Старый 03.03.2013, 00:06
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

Deff,
А что это даст?
Допустим, эта функция у нас есть.
Ответить с цитированием
  #7 (permalink)  
Старый 03.03.2013, 12:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от PashPP
хотя не всегда срабатывает
Когда именно?

Сообщение от PashPP
Что это за k и val
k - показывает сколько раз нужно взять "x" дабы "y" взялся 1 раз гарантировано
val - коррекция "k", если остаток достаточно большей и "k" можно уменьшить на 1.
Ответить с цитированием
  #8 (permalink)  
Старый 03.03.2013, 12:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от PashPP
хотя не всегда срабатывает
Не все варианты учел...

// число 
var n = 678867;
// число-делитель, групп которого должно быть макс количество
var x = 767;
// другое число-делитель
var y = 6776;
// -количество групп
var nX = 0, nY = 0;
if (n > y) {
	var k = Math.floor(y / x);
	k += ((y % x) > 0) ? 1 : 0;
	nX = Math.floor(n / x);
	nY = n % x;
	if (nY < y ) {
		var val = Math.floor((nY + x * (k - 1)) / y);
		nX -= k - val;
		nY=1;
		if (nX < 0) {
			nX=0;
			nY=0;
		};
	} else {
		nY = Math.floor(nY / y);
	};
}
alert(nX + '*' + x + '+' + nY + '*' + y);

Последний раз редактировалось ksa, 03.03.2013 в 12:18.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление нацело raler jQuery 2 25.05.2015 12:12
Простая задачка Nanto Элементы интерфейса 6 08.09.2011 15:19
Задачка по JQuery UI nightkon Элементы интерфейса 2 31.08.2011 19:34
задачка по геометрии js lammeR Общие вопросы Javascript 16 02.02.2011 16:01
Небольшая задачка Maksim jQuery 4 30.09.2009 19:43