Страницы

Поиск по вопросам

суббота, 27 октября 2018 г.

функция давления кирпича пирамиды

Есть двумерная пирамида из кирпичей. Вес 1го - 1 кг, давит равномерно на 2 под ним по 0.5кг. То есть, если на верхний давит +100 кг, тогда под ним на каждый будет (100+1)/2 кг - на нижний давит пол веса каждого над ним.
1,0=.5 2,0=.75 2,1=1.5 3,0=.875 3,1=.2.125
Как вычислять давление на любой из них, указывая позицию, например, к4-2, к8-4 ... к(рядСверху,номерСлева) - как функция с 2 параметрами, возвращающая вес?
Думал, pяд*.5 + (pяд-1)/2 или 1*(c+1) / 2*p + 1*c / 2*p, разные другие варианты, но никак не могу подобрать точный. (желательно на java)


Ответ

А почему не воспользоваться рекурсией? Значения веса, номер ряда и номер кирпича в ряду вставляйте какие вам надо:
public static void main(String[] args) { float weight = 1; //вес кирпча int row = 5; //номер ряда начиная с 1 с верху int num = 3; //номер кирпича слева (или с права, как больше нравится) с 1 System.out.println(pressueOnBrick(row, num, weight)); }
//давление на один кирпич public static float pressueOnBrick(int row, int num, float weight) { return pressue(row, num, weight) - weight; //давление оказываемое на один кирпич = полное //давление которое оказывает кирпич минус вес кирпича }
//полное давление оказываемое кирпичём (включая свой вес) public static float pressue(int row, int num, float weight) { //в ряду не может быть кирпичей с номером меньше 1 и больше чем номер ряда(число кирпичей в ряду = номеру ряда) if (num < 1 || num > row) { return 0; }
//давление которое оказывает кирпич равно сумме веса кирпича и половине веса кирпичей которые давят на него //слева и справа return weight + (pressue(row - 1, num - 1, weight) + pressue(row - 1, num, weight)) / 2; }
Валидация вводимых значений на вашей совести.

Комментариев нет:

Отправить комментарий