给定数字n ,任务是打印所有小于或等于n的数字,它们是理想的立方体,并且最终它们的数字之和为1 。
例子:
Input: n = 100
Output: 1 64
64 = 6 + 4 = 10 = 1 + 0 = 1
Input: n = 1000
Output: 1 64 343 1000
方法:对于每个小于或等于n的理想立方体,继续计算其位数的总和,直到将数字减少为一位为止(此处为O(1)方法),如果该位数为1,则打印理想立方体,否则跳过到n以下的下一个完美立方体,直到考虑完所有完美立方体为止。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
#include
using namespace std;
// Function that returns true if the eventual
// digit sum of number nm is 1
bool isDigitSumOne(int nm)
{
//if reminder will 1
//then eventual sum is 1
if (nm % 9 == 1)
return true;
else
return false;
}
// Function to print the required numbers
// less than n
void printValidNums(int n)
{
int cbrt_n = (int)cbrt(n);
for (int i = 1; i <= cbrt_n; i++) {
int cube = pow(i, 3);
// If it is the required perfect cube
if (cube >= 1 && cube <= n && isDigitSumOne(cube))
cout << cube << " ";
}
}
// Driver code
int main()
{
int n = 1000;
printValidNums(n);
return 0;
}
Java
// Java implementation of the approach
class GFG {
// Function that returns true if the eventual
// digit sum of number nm is 1
static boolean isDigitSumOne(int nm)
{
//if reminder will 1
//then eventual sum is 1
if (nm % 9 == 1)
return true;
else
return false;
}
// Function to print the required numbers
// less than n
static void printValidNums(int n)
{
int cbrt_n = (int)Math.cbrt(n);
for (int i = 1; i <= cbrt_n; i++) {
int cube = (int)Math.pow(i, 3);
// If it is the required perfect cube
if (cube >= 1 && cube <= n && isDigitSumOne(cube))
System.out.print(cube + " ");
}
}
// Driver code
public static void main(String args[])
{
int n = 1000;
printValidNums(n);
}
}
Python
# Python3 implementation of the approach
import math
# Function that returns true if the eventual
# digit sum of number nm is 1
def isDigitSumOne(nm) :
#if reminder will 1
#then eventual sum is 1
if(nm % 9 == 1):
return True
else:
return False
# Function to print the required numbers
# less than n
def printValidNums(n):
cbrt_n = math.ceil(n**(1./3.))
for i in range(1, cbrt_n + 1):
cube = i * i * i
if (cube >= 1 and cube <= n and isDigitSumOne(cube)):
print(cube, end = " ")
# Driver code
n = 1000
printValidNums(n)
C#
// C# implementation of the approach
using System;
class GFG
{
// Function that returns true if the
// eventual digit sum of number nm is 1
static bool isDigitSumOne(int nm)
{
//if reminder will 1
//then eventual sum is 1
if (nm % 9 == 1)
return true;
else
return false;
}
// Function to print the required
// numbers less than n
static void printValidNums(int n)
{
int cbrt_n = (int)Math.Ceiling(Math.Pow(n,
(double) 1 / 3));
for (int i = 1; i <= cbrt_n; i++)
{
int cube = (int)Math.Pow(i, 3);
// If it is the required perfect cube
if (cube >= 1 && cube <= n &&
isDigitSumOne(cube))
Console.Write(cube + " ");
}
}
// Driver code
static public void Main ()
{
int n = 1000;
printValidNums(n);
}
}
// This code is contributed by akt_mit
PHP
= 1 && $cube <= $n &&
isDigitSumOne($cube))
echo $cube, " ";
}
}
// Driver code
$n = 1000;
printValidNums($n);
// This code is contributed by Ryuga
?>
输出:
1 64 343 1000