首页 > 专题系列 > Java解POJ > POJ 2405 Beavergnaw [解题报告] Java
2013
11-11

POJ 2405 Beavergnaw [解题报告] Java

Beavergnaw

问题描述 :

When chomping a tree the beaver cuts a very specific shape out of the tree trunk. What is left in the tree trunk looks like two frustums of a cone joined by a cylinder with the diameter the same as its height. A very curious beaver tries not to demolish a tree but rather sort out what should be the diameter of the cylinder joining the frustums such that he chomped out certain amount of wood. You are to help him to do the calculations.

We will consider an idealized beaver chomping an idealized tree. Let us assume that the tree trunk is a cylinder of diameter D and that the beaver chomps on a segment of the trunk also of height D. What should be the diameter d of the inner cylinder such that the beaver chmped out V cubic units of wood?

输入:

Input contains multiple cases each presented on a separate line. Each line contains two integer numbers D and V separated by whitespace. D is the linear units and V is in cubic units. V will not exceed the maximum volume of wood that the beaver can chomp. A line with D=0 and V=0 follows the last case.

输出:

For each case, one line of output should be produced containing one number rounded to three fractional digits giving the value of d measured in linear units.

样例输入:

10 250
20 2500
25 7000
50 50000
0 0

样例输出:

8.054
14.775
13.115
30.901

解题代码:

//* @author 洪晓鹏<[email protected]>
import java.util.Scanner;


public class Main {
 public static void main(String[] args)
  {
	Scanner in = new Scanner(System.in);
	while(true)
	{
		int D = in.nextInt();
		int V = in.nextInt();
		if(D==0 && V==0)
			break;
		//double v1 = (d * d * d * Math.PI / 4 - v);
		double d1 = Math.pow(D*D*D-6*V/Math.PI,1.0/3);
		System.out.printf("%.3f%n", d1);
	}
  }
}

  1. 算法是程序的灵魂,算法分简单和复杂,如果不搞大数据类,程序员了解一下简单点的算法也是可以的,但是会算法的一定要会编程才行,程序员不一定要会算法,利于自己项目需要的可以简单了解。

  2. 换句话说,A[k/2-1]不可能大于两数组合并之后的第k小值,所以我们可以将其抛弃。
    应该是,不可能小于合并后的第K小值吧

  3. #include <stdio.h>
    int main(void)
    {
    int arr[] = {10,20,30,40,50,60};
    int *p=arr;
    printf("%d,%d,",*p++,*++p);
    printf("%d,%d,%d",*p,*p++,*++p);
    return 0;
    }

    为什么是 20,20,50,40,50. 我觉得的应该是 20,20,40,40,50 . 谁能解释下?