Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 n개의 구형 공을 물탱크에 담갔을 때 넘침 여부 확인하는 프로그램

원기둥 모양 물탱크의 반지름과 높이, 탱크에 담그려는 'n'개의 구형 고체 공의 반지름, 그리고 탱크에 현재 담겨 있는 물의 부피가 주어졌을 때, 공들을 물탱크에 담그면 탱크가 넘치는지 아닌지를 확인하는 것이 이 글의 목표입니다.

부피 계산 공식

원기둥(물탱크)

3.14 * r * r * h

여기서 r은 탱크의 반지름, h는 탱크의 높이입니다.

구(공)

(4/3) * 3.14 * R * R * R

여기서 R은 구형 공의 반지름입니다.

입력 및 출력 예시

입력

tank_height = 5
tank_radius = 2
water_volume = 10
capacity = 10
ball_radius = 2

출력

it will overflow

문제 해결 접근 방식

  • 탱크의 반지름과 높이, 담글 공의 개수와 반지름 등 주어진 치수들을 입력받습니다.
  • 공식을 적용하여 탱크의 용량(부피)을 계산합니다.
  • 공식을 적용하여 구 하나의 부피를 계산합니다.
  • 공이 물탱크에 담길 때마다 물의 부피가 증가하므로, 현재 물의 부피를 계산합니다.
  • 물의 부피와 공들의 부피를 더하여 총 부피를 구합니다.
  • 총 부피와 탱크 용량을 비교하여 넘침 여부를 판단합니다.
    • 총 부피가 용량보다 크면 → 탱크가 넘칩니다.
    • 총 부피가 용량보다 작으면 → 탱크가 넘치지 않습니다.

알고리즘

Step 1 → 탱크가 넘치는지 확인하는 함수 선언
    void overflow(int H, int r, int h, int N, int R)
       float tank_cap = 3.14 * r * r * H 선언
       float water_vol = 3.14 * r * r * h 선언
       float balls_vol = N * (4 / 3) * 3.14 * R * R * R 선언
       float vol = water_vol + balls_vol 선언
       IF (vol > tank_cap)
          "it will overflow" 출력
       End
       Else
          "No it will not overflow" 출력
       End
Step 2 → main() 함수에서
       int tank_height = 5, tank_radius = 2, water_volume = 10,
       capacity = 10, ball_radius = 2 선언
       overflow(tank_height, tank_radius, water_volume, capacity, ball_radius) 호출

C++ 예제 코드

#include <bits/stdc++.h>
using namespace std;
// 탱크가 넘치는지 확인하는 함수
void overflow(int H, int r, int h, int N, int R){
   float tank_cap = 3.14 * r * r * H;
   float water_vol = 3.14 * r * r * h;
   float balls_vol = N * (4 / 3) * 3.14 * R * R * R;
   float vol = water_vol + balls_vol;
   if (vol > tank_cap){
      cout<<"it will overflow";
   }
   else{
      cout<<"No it will not overflow";
   }
}
int main(){
   int tank_height = 5, tank_radius = 2, water_volume = 10, capacity = 10, ball_radius = 2;
   overflow(tank_height, tank_radius, water_volume, capacity, ball_radius);
   return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

it will overflow

참고: 정수 나눗셈 주의점

위 코드에서 (4 / 3)은 정수끼리의 나눗셈이므로 소수점 이하가 버려져 결과가 1이 됩니다. 따라서 구의 부피가 실제보다 작게 계산될 수 있습니다. 정확한 결과를 얻으려면 N * (4.0 / 3.0) * 3.14 * R * R * R처럼 실수형 나눗셈으로 수정하는 것이 좋습니다.