14309 - Mixed Nuts   

Description

Mixed nuts, especially peanuts, has always been Anya's favorite snack. They come in various shapes and sizes: cubes, cuboids, spheres, cones, and cylinders, each with their own unique taste and texture.

However, Anya got poor grades in her math class, and she struggles to acquire the Stella Stars needed for Loid's secret mission -- to get closer to Donovan Desmond and uncover his scheme.

To help Anya on her schoolwork, Loid decided to teach her the basics of geometry with the shapes of mixed nuts. Given several nuts of different shapes and sizes, Loid wants Anya to calculate total volume of the nuts. Since Anya has the ability to read other people's minds, she can easily read the volume formula for each shape straight from Loid's mind. However, she is not familiar with the calculations, so she needs your help to build a program that can calculate the volume of the nuts.

The volume of a nut can be calculated using the following formulas:

  • Cube: $V = s^3$, where $s$ is the side length of the cube.
  • Cuboid: $V = l \times w \times h$, where $l$, $w$, and $h$ are the length, width, and height of the cuboid, respectively.
  • Sphere: $V = \frac{4}{3} \pi r^3$, where $r$ is the radius of the sphere.
  • Cone: $V = \frac{1}{3} \pi r^2 h$, where $r$ is the radius of the base, and $h$ is the height of the cone.
  • Cylinder: $V = \pi r^2 h$, where $r$ is the radius of the base, and $h$ is the height of the cylinder.

Given a base class Nut, implement the derived classes CubeNut, CuboidNut, SphereNut, ConeNut, and CylinderNut that represent the shapes of mixed nuts. You should use setVolume to set the corresponding volume of each nut on construction.

Hints

  • Be careful that the type of volume is double, and 4/3=1 is of type int.
  • You only need to implement the constructor of each derived class.
  • Note that CubeNut inherits from CuboidNut instead of Nut.
  • Use oj::Nut::PI as your $\pi$ in the calculation.

Input

This is a partial judge problem, input and output are handled by main.cpp.

For each line of input, you will be given a string shape, followed by the corresponding parameters for the shape. The parameters are separated by a single space, and the order of the parameters is as follows:

  • Cube: $s$ (side length)
  • Cuboid: $l , w , h$ (length, width, height)
  • Sphere: $r$ (radius)
  • Cone: $r , h$ (radius, height)
  • Cylinder: $r , h$ (radius, height)

You should do some basic check: if the input is illegal (e.g. length < 0), then the volume should be 0. Also, you need to consider the scenario like Cuboid -1 -2 3, where volume would be 0 instead of 6.

Constraints

  • $\text{|s|, |l|, |w|, |h|, |r|} \leq 1000$
  • $\text{s, l, w, h, r}$ are presented in decimal format with at most 4 decimal places.
  • $0 \leq \text{# of shapes} \leq 1000$
  • Result is within the range of double.

Output

This is a partial judge problem, input and output are handled by main.cpp.

Output the total volume of the nuts, rounded to 4 decimal places.

Sample Input  Download

Sample Output  Download

Partial Judge Code

14309.cpp

Partial Judge Header

14309.h

Tags




Discuss