2013-06-30 4 views
0

Мне нужно начальное, среднее и конечное значение любого заданного числа, оно не должно быть равномерно распределенным, просто нужно немного логики. Пример:Вычислить начало и конец числа

var parts = 3;

Очевидно, что я мог разделим это на 3 и получить еще разработанный результат start: 1; middle: 1; end: 1.

Однако, если пользователь должен был поставить в чем-то вроде:

var parts = 8;

В моих глазах, ответ был бы start: 2; middle: 4; end: 2.

Мне нужно выполнить основную задачу в зависимости от длины переменной «parts».

Пример:

Мне нужно вычислить значение начала, середины и конца, так что я могу сделать что-то вроде этого.

for (var t=0; t < start; t++){ 
    console.log('Start'); 
} 
for (var t=0; t < middle; t++){ 
    console.log('Middle'); 
} 
for (var t=0; t < end; t++){ 
    console.log('End'); 
} 

Как я мог рассчитать это?

+1

пожалуйста, вы можете добавить любые ограничения й среднее вы можете быть более конкретным? –

+1

Как распределять номера? –

+0

Я добавил еще один пример: я надеюсь, что это поможет, цифры должны быть распределены равномерно, и если они не могут, средний будет принимать более высокое значение, например, мой пример с переменной частей == 8. @TimeToogo –

ответ

0

Чтобы быть абсолютно честным, как только я вышел из дома, и сел в машину, я вспомнил о Modulo Operation. Хотя большинство ваших ответов действительно работают, и у меня был один ответ, который использовал Modulos, я должен быть эгоистом здесь, и большинство из них намного проще и правильнее.

var parts=9; 
var start = end = middle = (parts - (parts % 3))/3; 
middle += parts % 3; 

Благодарю вас за помощь!

Демо: http://jsfiddle.net/B5tap/

+0

Это очень плохое использование оператора modulo; 'Math.floor (parts/3)' проще понять, чем '(parts - (parts% 3))/3'. –

+0

Я считаю, что читать что-то, как то, как это должно быть написано, а не интерпретировать javascript-интерпретацию функции Modulo, лучше читать. @Jack –

+0

Я не вижу, какая часть является интерпретацией функции modulo? Часть вашего кода, о которой я говорил, касается только подразделения. –

1

Вот решение:

var start,end,middle; 
var parts=10; 
if(parts%3==0) 
{ 
start=end=middle=parts/3; 
} 
else 
{ 
start=parseInt(parts/3); 
end=parseInt(parts/3); 
middle=parts-start-end; 
} 
console.warn(start+" "+end+" "+middle); 

Вот Fiddle: http://jsfiddle.net/j9WUZ/4/

+0

Thankyou для публикации этого, ваш пример, похоже, не работает? Хотя я написал свой собственный ответ здесь, это кажется намного проще :) –

+0

@ShannonHochkins Oh.I забыл обновить скрипку. Теперь она обновилась. Я видел решение довольно хорошо. :) –

2
var parts, segment, start, middle, end; 

parts = 8; // Obviously this value would be defined elsewhere 

segment = Math.floor(parts/3); 

start = end = segment; 
middle = parts - (segment * 2); 
+0

Да, почти. Вы имели в виду 'middle = parts - 2 * segment', если я не ошибаюсь :) – hobbs

+0

@hobbs Вы правы, обновили мой ответ. –

+0

Это круто, не знаю об этом, однако я решил пойти своим собственным ответом, это просто проще :) –

Смежные вопросы