📌  相关文章
📜  由当前项与其最大和最小数字的乘积组成的序列的第N个项

📅  最后修改于: 2021-05-04 20:26:05             🧑  作者: Mango

给定两个数字NK ,其中K表示序列的起始项。任务是找到由当前项与当前项的最大位数和最小位数之和构成的序列的第N个项,即

例子:

方法:
让我们尝试看看一些观察,

从上面的示例中可以看出,在整数中至少有一位数字变为0之后,该序列最终停止增加。如果任何一位数字变为0,则最小值将始终为0,此后,该序列中的所有整数保持不变。
因此,方法是找到序列的项,直到在当前项的数字中遇到任何0为止,
下面是上述方法的实现。

C++
// C++ program for the above approach.
 
#include 
using namespace std;
 
// Function to find integer
int find(int K, int N)
{
 
    // because 1st integer is K itself
    N--;
 
    while (N--) {
        int curr_term = K;
 
        // Initialize min_d and max_d
        int min_d = 9;
        int max_d = 0;
 
        while (curr_term > 0) {
            int r = curr_term % 10;
 
            // updating min_d and max_d
            min_d = min(min_d, r);
            max_d = max(max_d, r);
 
            curr_term = curr_term / 10;
        }
 
        // break if min digit is 0
        if (min_d == 0) {
            break;
        }
 
        K = K + min_d * max_d;
    }
 
    return K;
}
 
// Driver code
int main()
{
    int K = 487;
    int N = 2;
 
    cout << find(K, N) << endl;
 
    return 0;
}


Java
// Java program for the above approach.
import java.util.*;
 
class GFG{
 
// Function to find integer
static int find(int K, int N)
{
 
    // Because 1st integer is K itself
    N--;
 
    while (N-- != 0)
    {
        int curr_term = K;
 
        // Initialize min_d and max_d
        int min_d = 9;
        int max_d = 0;
 
        while (curr_term > 0)
        {
            int r = curr_term % 10;
 
            // Updating min_d and max_d
            min_d = Math.min(min_d, r);
            max_d = Math.max(max_d, r);
 
            curr_term = curr_term / 10;
        }
 
        // Break if min digit is 0
        if (min_d == 0)
        {
            break;
        }
        K = K + min_d * max_d;
    }
    return K;
}
 
// Driver code
public static void main(String[] args)
{
    int K = 487;
    int N = 2;
 
    System.out.print(find(K, N) + "\n");
}
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 program for the above approach.
 
# Function to find integer
def find(K, N):
     
    # Because 1st integer is K itself
    N = N - 1
     
    for i in range(0, N):
        curr_term = K
         
        # Initialize min_d and max_d
        min_d = 9
        max_d = 0
         
        while curr_term > 0:
            r = int(curr_term % 10)
             
            # Updating min_d and max_d
            min_d = min(min_d, r)
            max_d = max(max_d, r)
             
            curr_term = int(curr_term / 10)
         
        # Break if min digit is 0
        if min_d == 0:
           break
         
        K = K + min_d * max_d
        return K
 
# Driver code
K = 487
N = 2
 
print(find(K, N))
 
# This code is contributed by ishayadav181


C#
// C# program for the above approach.
using System;
 
class GFG{
 
// Function to find integer
static int find(int K, int N)
{
 
    // Because 1st integer is K itself
    N--;
 
    while (N-- != 0)
    {
        int curr_term = K;
 
        // Initialize min_d and max_d
        int min_d = 9;
        int max_d = 0;
 
        while (curr_term > 0)
        {
            int r = curr_term % 10;
 
            // Updating min_d and max_d
            min_d = Math.Min(min_d, r);
            max_d = Math.Max(max_d, r);
 
            curr_term = (int)(curr_term / 10);
        }
 
        // Break if min digit is 0
        if (min_d == 0)
        {
            break;
        }
 
        K = K + min_d * max_d;
    }
    return K;
}
 
// Driver code
public static void Main()
{
    int K = 487;
    int N = 2;
 
    Console.Write(find(K, N));
}
}
 
// This code is contributed by Code_Mech


Javascript


输出:
519

时间复杂度: O(N)