📌  相关文章
📜  小于N的数字是理想的立方体,并且其位数的总和减少为个位数为1

📅  最后修改于: 2021-04-26 07:28:02             🧑  作者: Mango

给定数字n ,任务是打印所有小于或等于n的数字,它们是理想的立方体,并且最终它们的数字之和为1

例子:

方法:对于每个小于或等于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