Encuentre el siguiente número sumando números naturales en orden alternando índices desde el último

Dada una string numérica S de tamaño N , la tarea es encontrar el número formado al sumar los números 1 , 2 , 3 , … hasta el infinito a cada dígito alternativo de la string numérica dada S (comenzando desde la última posición). En cualquier momento, si el resultado de la suma no es un solo dígito, realice la suma repetida de dígitos hasta que el resultado sea un solo dígito .

Ejemplos:

Entrada: S = “1345”
Salida: 1546
Explicación:
Agregar 1 al último dígito, es decir, 5 se convertirá en 6, lo que modifica la string a “1346”.
Agregar 2 al penúltimo dígito, es decir, 3 se convertirá en 5, lo que modifica la string a «1546».
Después de los pasos anteriores, la string resultante formada es «1546».

Entrada: S = “789”
Salida: 981

 

Planteamiento: La idea para resolver este problema radica en la parte de la suma repetida. En realidad, no hay necesidad de realizar la suma repetidamente hasta que haya un dígito. En su lugar, ejecute el número % 9 . Si el número % 9 es igual a 9 , entonces la suma de los dígitos será igual a 9, de lo contrario la suma de los dígitos será igual al número % 9 . Siga los pasos a continuación para resolver el problema:

  • Inicialice las variables temp y added_number como 0 para almacenar la posición que se modificará y el número que se agregará.
  • Inicialice el resultado de la variable de string como una string vacía para almacenar el resultado.
  • Itere sobre el rango [len-1, 0] donde len es la longitud de la string, usando la variable i y realice los siguientes pasos:
    • Inicialice el dígito variable como el dígito en la posición actual en la string.
    • Si temp%2 es igual a 0 , aumente el valor de added_number en 1 y agréguelo al dígito variable .
    • Si el dígito mayor que es igual a 10 , establezca el valor del dígito como dígito% 9 y, si aún así, el dígito es igual a 0 , establezca su valor como 9.
    • Agregue el dígito variable al resultado variable al principio.
  • Después de realizar los pasos anteriores, imprima el valor del resultado como respuesta.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to generate the resultant
// number using the given criteria
string generateNumber(string number)
{
    int temp = 0, adding_number = 0;
 
    // Storing end result
    string result = "";
 
    // Find the length of numeric string
    int len = number.size();
 
    // Traverse the string
    for (int i = len - 1; i >= 0; i--) {
 
        // Storing digit at ith position
        int digit = number[i] - '0';
 
        // Checking that the number would
        // be added or not
        if (temp % 2 == 0) {
 
            adding_number += 1;
            digit += adding_number;
 
            // Logic for summing the digits
            // if the digit is greater than 10
            if (digit >= 10) {
                digit %= 9;
                if (digit == 0)
                    digit = 9;
            }
        }
 
        // Storing the result
        result = to_string(digit) + result;
        temp += 1;
    }
 
    // Returning the result
    return result;
}
 
// Driver Code
int main()
{
    string S = "1345";
    cout << generateNumber(S);
 
    return 0;
}

Java

// Java program for the above approach
class GFG
{
 
    // Function to generate the resultant
    // number using the given criteria
    public static String generateNumber(String number) {
        int temp = 0, adding_number = 0;
 
        // Storing end result
        String result = "";
 
        // Find the length of numeric string
        int len = number.length();
 
        // Traverse the string
        for (int i = len - 1; i >= 0; i--) {
 
            // Storing digit at ith position
            int digit = (int) number.charAt(i) - (int) '0';
 
            // Checking that the number would
            // be added or not
            if (temp % 2 == 0) {
 
                adding_number += 1;
                digit += adding_number;
 
                // Logic for summing the digits
                // if the digit is greater than 10
                if (digit >= 10) {
                    digit %= 9;
                    if (digit == 0)
                        digit = 9;
                }
            }
 
            // Storing the result
            result = digit + result;
            temp += 1;
        }
 
        // Returning the result
        return result;
    }
 
    // Driver Code
    public static void main(String args[]) {
        String S = "1345";
        System.out.println(generateNumber(S));
    }
 
}
 
// This code is contributed by gfgking.

Python3

# Python3 program for the above approach
 
# Function to generate the resultant
# number using the given criteria
def generateNumber(number) :
     
    temp = 0; adding_number = 0;
 
    # Storing end result
    result = "";
 
    # Find the length of numeric string
    l = len(number);
 
    # Traverse the string
    for i in range(l - 1, -1, -1) :
 
        # Storing digit at ith position
        digit = ord(number[i]) - ord('0');
 
        # Checking that the number would
        # be added or not
        if (temp % 2 == 0) :
 
            adding_number += 1;
            digit += adding_number;
 
            # Logic for summing the digits
            # if the digit is greater than 10
            if (digit >= 10) :
                digit %= 9;
                if (digit == 0) :
                    digit = 9;
         
        # Storing the result
        result = str(digit) + result;
        temp += 1;
 
    # Returning the result
    return result;
 
# Driver Code
if __name__ ==  "__main__" :
 
    S = "1345";
    print(generateNumber(S));
 
    # This code is contributed by AnkThon

Javascript

<script>
        // JavaScript Program to implement
        // the above approach
 
 
        // Function to generate the resultant
        // number using the given criteria
        function generateNumber(number) {
            let temp = 0, adding_number = 0;
 
            // Storing end result
            let result = "";
 
            // Find the length of numeric string
            let len = number.length;
 
            // Traverse the string
            for (let i = len - 1; i >= 0; i--) {
 
                // Storing digit at ith position
                let digit = parseInt(number[i]);
 
                // Checking that the number would
                // be added or not
                if (temp % 2 == 0) {
 
                    adding_number += 1;
                    digit += adding_number;
 
                    // Logic for summing the digits
                    // if the digit is greater than 10
                    if (digit >= 10) {
                        digit %= 9;
                        if (digit == 0)
                            digit = 9;
                    }
                }
 
                // Storing the result
                result = (digit).toString() + result;
                temp += 1;
            }
 
            // Returning the result
            return result;
        }
 
        // Driver Code
 
        let S = "1345";
        document.write(generateNumber(S));
 
 
// This code is contributed by Potta Lokesh
    </script>

C#

// C# program for the above approach
using System;
public class GFG
{
 
    // Function to generate the resultant
    // number using the given criteria
    public static String generateNumber(string number) {
        int temp = 0, adding_number = 0;
 
        // Storing end result
        string result = "";
 
        // Find the length of numeric string
        int len = number.Length;
 
        // Traverse the string
        for (int i = len - 1; i >= 0; i--) {
 
            // Storing digit at ith position
            int digit = (int)number[i] - (int)'0';
 
            // Checking that the number would
            // be added or not
            if (temp % 2 == 0) {
 
                adding_number += 1;
                digit += adding_number;
 
                // Logic for summing the digits
                // if the digit is greater than 10
                if (digit >= 10) {
                    digit %= 9;
                    if (digit == 0)
                        digit = 9;
                }
            }
 
            // Storing the result
            result = digit + result;
            temp += 1;
        }
 
        // Returning the result
        return result;
    }
 
    // Driver Code
    public static void Main(string []args) {
        string S = "1345";
        Console.WriteLine(generateNumber(S));
    }
 
}
 
// This code is contributed by AnkThon
Producción: 

1546

 

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por vandanakillari54935 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *