给定一个正整数 。任务是找到最接近N的理想平方数,以及从N达到该数所需的步骤。
注意:与N最接近的完美平方可以小于,等于或大于N ,步长是指N与最接近的完美平方之间的差。
例子:
Input: N = 1500
Output: Perfect square = 1521, Steps = 21
For N = 1500
Closest perfect square greater than N is 1521.
So steps required is 21.
Closest perfect square less than N is 1444.
So steps required is 56.
The minimum of these two is 1521 with steps 21.
Input: N = 2
Output: Perfect Square = 1, Steps = 1
For N = 2
Closest perfect square greater than N is 4.
So steps required is 2.
Closest perfect square less than N is 1.
So steps required is 1.
The minimum of these two is 1.
方法:
- 如果N是一个完美的正方形,则打印N并将步长设置为0 。
- 否则,找到第一个完美的平方数> N并记下与N的差。
- 然后,找到第一个完美平方数
并记下与N的差。 - 并打印出一个完美的正方形,从而得到这两个差异中的最小值,并将差异作为最小步长。
下面是上述方法的实现:
C++
// CPP program to find the closest perfect square
// taking minimum steps to reach from a number
#include
using namespace std;
// Function to check if a number is
// perfect square or not
bool isPerfect(int N)
{
if ((sqrt(N) - floor(sqrt(N))) != 0)
return false;
return true;
}
// Function to find the closest perfect square
// taking minimum steps to reach from a number
void getClosestPerfectSquare(int N)
{
if (isPerfect(N))
{
cout< diff2)
cout<
Java
// Java program to find the closest perfect square
// taking minimum steps to reach from a number
class GFG {
// Function to check if a number is
// perfect square or not
static boolean isPerfect(int N)
{
if ((Math.sqrt(N) - Math.floor(Math.sqrt(N))) != 0)
return false;
return true;
}
// Function to find the closest perfect square
// taking minimum steps to reach from a number
static void getClosestPerfectSquare(int N)
{
if (isPerfect(N)) {
System.out.println(N + " "
+ "0");
return;
}
// Variables to store first perfect
// square number
// above and below N
int aboveN = -1, belowN = -1;
int n1;
// Finding first perfect square
// number greater than N
n1 = N + 1;
while (true) {
if (isPerfect(n1)) {
aboveN = n1;
break;
}
else
n1++;
}
// Finding first perfect square
// number less than N
n1 = N - 1;
while (true) {
if (isPerfect(n1)) {
belowN = n1;
break;
}
else
n1--;
}
// Variables to store the differences
int diff1 = aboveN - N;
int diff2 = N - belowN;
if (diff1 > diff2)
System.out.println(belowN + " " + diff2);
else
System.out.println(aboveN + " " + diff1);
}
// Driver code
public static void main(String args[])
{
int N = 1500;
getClosestPerfectSquare(N);
}
}
Python3
# Python3 program to find the closest
# perfect square taking minimum steps
# to reach from a number
# Function to check if a number is
# perfect square or not
from math import sqrt, floor
def isPerfect(N):
if (sqrt(N) - floor(sqrt(N)) != 0):
return False
return True
# Function to find the closest perfect square
# taking minimum steps to reach from a number
def getClosestPerfectSquare(N):
if (isPerfect(N)):
print(N, "0")
return
# Variables to store first perfect
# square number above and below N
aboveN = -1
belowN = -1
n1 = 0
# Finding first perfect square
# number greater than N
n1 = N + 1
while (True):
if (isPerfect(n1)):
aboveN = n1
break
else:
n1 += 1
# Finding first perfect square
# number less than N
n1 = N - 1
while (True):
if (isPerfect(n1)):
belowN = n1
break
else:
n1 -= 1
# Variables to store the differences
diff1 = aboveN - N
diff2 = N - belowN
if (diff1 > diff2):
print(belowN, diff2)
else:
print(aboveN, diff1)
# Driver code
N = 1500
getClosestPerfectSquare(N)
# This code is contributed
# by sahishelangia
C#
// C# program to find the closest perfect square
// taking minimum steps to reach from a number
using System;
class GFG {
// Function to check if a number is
// perfect square or not
static bool isPerfect(int N)
{
if ((Math.Sqrt(N) - Math.Floor(Math.Sqrt(N))) != 0)
return false;
return true;
}
// Function to find the closest perfect square
// taking minimum steps to reach from a number
static void getClosestPerfectSquare(int N)
{
if (isPerfect(N)) {
Console.WriteLine(N + " "
+ "0");
return;
}
// Variables to store first perfect
// square number
// above and below N
int aboveN = -1, belowN = -1;
int n1;
// Finding first perfect square
// number greater than N
n1 = N + 1;
while (true) {
if (isPerfect(n1)) {
aboveN = n1;
break;
}
else
n1++;
}
// Finding first perfect square
// number less than N
n1 = N - 1;
while (true) {
if (isPerfect(n1)) {
belowN = n1;
break;
}
else
n1--;
}
// Variables to store the differences
int diff1 = aboveN - N;
int diff2 = N - belowN;
if (diff1 > diff2)
Console.WriteLine(belowN + " " + diff2);
else
Console.WriteLine(aboveN + " " + diff1);
}
// Driver code
public static void Main()
{
int N = 1500;
getClosestPerfectSquare(N);
}
}
// This code is contributed by anuj_67..
PHP
$diff2)
echo $belowN, " " , $diff2;
else
echo $aboveN, " ", $diff1;
}
// Driver code
$N = 1500;
getClosestPerfectSquare($N);
// This code is contributed by ajit.
?>
输出:
1521 21