주어진 과제는 밑변이 's'인 직각 이등변 삼각형 안에 들어갈 수 있는 변 'a'를 갖는 정사각형의 최대 수를 찾는 것입니다(이등변 삼각형은 최소한 2개의 동일한 변을 가집니다).
이제 예제를 사용하여 수행해야 하는 작업을 이해해 보겠습니다.
입력
s=5, a=1
출력
10
설명 - 밑변의 제곱수는 s를 a로 나누고 1을 빼서 계산할 수 있습니다. 따라서 밑변의 제곱수 =5/1 – 1 =4입니다.
유사하게 하단 4개의 정사각형이 배치되면 밑변이 있는 새로운 이등변 삼각형을 얻은 다음(s-a) 동일한 절차를 반복하고 단일 정사각형이 맨 위에 놓일 때까지 3개의 정사각형 등을 얻습니다.
입력
s=7, a=2
출력
3
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.
-
최대 정사각형 수를 찾으려면 삼각형의 밑변에서 시작하여 정사각형 수를 찾아야 합니다.
-
정사각형의 수를 찾기 위해 밑변 s를 정사각형의 한 변으로 나누고 1을 뺍니다 =s/a – 1.
-
그러면 밑이 (s - a)가 있는 또 다른 이등변 삼각형이 남게 됩니다. 이 삼각형은 아래의 이전 행보다 정사각형을 하나 적게 수용하며 다음과 같은 방식으로 계산할 수 있습니다. -
다음 행의 제곱 =(s - a)/a – 1 =(s/a – a/a) – 1=s/a - 1 - 1 =s/a – 2 =이전 행보다 1제곱 작습니다.피>
-
제곱수는 1에 도달할 때까지 계속 감소하므로 기본 행의 제곱수만 구하고 자연수를 더하는 공식을 사용하여 최종 합을 구하면 −
(n) * (n + 1) / 2
이 경우 공식은 − ((s / a) – 1) * (s / a) / 2
가 됩니다.예시
#include<bits/stdc++.h> using namespace std; int Max(int s, int a){ //formula for calculating maximum squares return ((s / a) - 1) * (s / a) / 2; } //Main function int main(){ int s = 5, a = 1; cout <<"Maximum squares possible are: "<<Max(s,a); return 0; }
출력
10