#алгоритм #математика #любой_язык
Есть двумерная пирамида из кирпичей. Вес 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)
Ответы
Ответ 1
А почему не воспользоваться рекурсией? Значения веса, номер ряда и номер кирпича в ряду вставляйте какие вам надо: 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; } Валидация вводимых значений на вашей совести.Ответ 2
#include#include
Комментариев нет:
Отправить комментарий