Encuentre el promedio de k dígitos desde el principio y l dígitos desde el final del número dado

Dados tres números enteros N , K y L . La tarea es encontrar el promedio de los primeros K dígitos y los últimos L dígitos del número N dado sin que ningún dígito se superponga.
Ejemplos: 
 

Entrada: N = 123456, K = 2, L = 3 
Salida: 3.0  La
suma de los primeros K dígitos será 1 + 2 = 3  La
suma de los últimos L dígitos será 4 + 5 + 6 = 15 
Promedio = (3 + 15) / (2 + 3) = 18 / 5 = 3
Entrada: N = 456966, K = 1, L = 1 
Salida: 5,0 
 

Enfoque: si el recuento de dígitos en n es menor que (K + L) , entonces no es posible encontrar el promedio sin que los dígitos se superpongan e imprimir -1 en ese caso. Si ese no es el caso, encuentre la suma de los últimos L dígitos de N y guárdela en una variable, digamos sum1 , luego encuentre la suma de los primeros K dígitos de N y guárdela en sum2 . Ahora, imprima el promedio como (sum1 + sum2) / (K + L) .
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count
// of digits in num
int countDigits(int num)
{
    int cnt = 0;
    while (num > 0)
    {
        cnt++;
        num /= 10;
    }
    return cnt;
}
 
// Function to return the sum
// of first n digits of num
int sumFromStart(int num, int n, int rem)
{
 
    // Remove the unnecessary digits
    num /= ((int)pow(10, rem));
 
    int sum = 0;
    while (num > 0)
    {
        sum += (num % 10);
        num /= 10;
    }
    return sum;
}
 
// Function to return the sum
// of the last n digits of num
int sumFromEnd(int num, int n)
{
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        sum += (num % 10);
        num /= 10;
    }
    return sum;
}
 
float getAverage(int n, int k, int l)
{
 
    // If the average can't be calculated without
    // using the same digit more than once
    int totalDigits = countDigits(n);
    if (totalDigits < (k + l))
        return -1;
 
    // Sum of the last l digits of n
    int sum1 = sumFromEnd(n, l);
 
    // Sum of the first k digits of n
    // (totalDigits - k) must be removed from the
    // end of the number to get the remaining
    // k digits from the beginning
    int sum2 = sumFromStart(n, k, totalDigits - k);
 
    // Return the average
    return ((float)(sum1 + sum2) / 
            (float)(k + l));
}
 
// Driver code
int main()
{
    int n = 123456, k = 2, l = 3;
    cout << getAverage(n, k, l);
 
    return 0;
}
 
// This code is contributed by PrinciRaj1992

Java

// Java implementation of the approach
class GFG {
 
    // Function to return the count
    // of digits in num
    public static int countDigits(int num)
    {
        int cnt = 0;
        while (num > 0) {
            cnt++;
            num /= 10;
        }
        return cnt;
    }
 
    // Function to return the sum
    // of first n digits of num
    public static int sumFromStart(int num, int n, int rem)
    {
 
        // Remove the unnecessary digits
        num /= ((int)Math.pow(10, rem));
 
        int sum = 0;
        while (num > 0) {
            sum += (num % 10);
            num /= 10;
        }
        return sum;
    }
 
    // Function to return the sum
    // of the last n digits of num
    public static int sumFromEnd(int num, int n)
    {
        int sum = 0;
        for (int i = 0; i < n; i++) {
            sum += (num % 10);
            num /= 10;
        }
        return sum;
    }
 
    public static float getAverage(int n, int k, int l)
    {
 
        // If the average can't be calculated without
        // using the same digit more than once
        int totalDigits = countDigits(n);
        if (totalDigits < (k + l))
            return -1;
 
        // Sum of the last l digits of n
        int sum1 = sumFromEnd(n, l);
 
        // Sum of the first k digits of n
        // (totalDigits - k) must be removed from the
        // end of the number to get the remaining
        // k digits from the beginning
        int sum2 = sumFromStart(n, k, totalDigits - k);
 
        // Return the average
        return ((float)(sum1 + sum2) / (float)(k + l));
    }
 
    // Driver code
    public static void main(String args[])
    {
        int n = 123456, k = 2, l = 3;
        System.out.print(getAverage(n, k, l));
    }
}

Python3

# implementation of the approach
from math import pow
 
# Function to return the count
# of digits in num
def countDigits(num):
    cnt = 0
    while (num > 0):
        cnt += 1
        num //= 10
    return cnt
 
# Function to return the sum
# of first n digits of num
def sumFromStart(num, n, rem):
     
    # Remove the unnecessary digits
    num //= pow(10, rem)
 
    sum = 0
    while (num > 0):
        sum += (num % 10)
        num //= 10
    return sum
 
# Function to return the sum
# of the last n digits of num
def sumFromEnd(num, n):
    sum = 0
    for i in range(n):
        sum += (num % 10)
        num //= 10
     
    return sum
 
def getAverage(n, k, l):
     
    # If the average can't be calculated without
    # using the same digit more than once
    totalDigits = countDigits(n)
    if (totalDigits < (k + l)):
        return -1
 
    # Sum of the last l digits of n
    sum1 = sumFromEnd(n, l)
 
    # Sum of the first k digits of n
    # (totalDigits - k) must be removed from the
    # end of the number to get the remaining
    # k digits from the beginning
    sum2 = sumFromStart(n, k, totalDigits - k)
 
    # Return the average
    return (sum1 + sum2) / (k + l)
 
# Driver code
if __name__ == '__main__':
    n = 123456
    k = 2
    l = 3
    print(getAverage(n, k, l))
 
# This code is contributed by
# Surendra_Gangwar

C#

// C# implementation of the approach
using System;
 
class GFG
{
 
    // Function to return the count
    // of digits in num
    public static int countDigits(int num)
    {
        int cnt = 0;
        while (num > 0)
        {
            cnt++;
            num /= 10;
        }
        return cnt;
    }
 
    // Function to return the sum
    // of first n digits of num
    public static int sumFromStart(int num,
                                   int n, int rem)
    {
 
        // Remove the unnecessary digits
        num /= ((int)Math.Pow(10, rem));
 
        int sum = 0;
        while (num > 0)
        {
            sum += (num % 10);
            num /= 10;
        }
        return sum;
    }
 
    // Function to return the sum
    // of the last n digits of num
    public static int sumFromEnd(int num, int n)
    {
        int sum = 0;
        for (int i = 0; i < n; i++)
        {
            sum += (num % 10);
            num /= 10;
        }
        return sum;
    }
 
    public static float getAverage(int n, int k, int l)
    {
 
        // If the average can't be calculated without
        // using the same digit more than once
        int totalDigits = countDigits(n);
        if (totalDigits < (k + l))
            return -1;
 
        // Sum of the last l digits of n
        int sum1 = sumFromEnd(n, l);
 
        // Sum of the first k digits of n
        // (totalDigits - k) must be removed from the
        // end of the number to get the remaining
        // k digits from the beginning
        int sum2 = sumFromStart(n, k, totalDigits - k);
 
        // Return the average
        return ((float)(sum1 + sum2) /
                (float)(k + l));
    }
 
    // Driver code
    public static void Main(String []args)
    {
        int n = 123456, k = 2, l = 3;
        Console.WriteLine(getAverage(n, k, l));
    }
}
 
// This code is contributed by Princi Singh

Javascript

<script>
// javascript implementation of the approach   
 
    // Function to return the count
    // of digits in num
    function countDigits(num)
    {
        var cnt = 0;
        while (num > 0)
        {
            cnt++;
            num = parseInt(num/10);
        }
        return cnt;
    }
 
    // Function to return the sum
    // of first n digits of num
    function sumFromStart(num, n, rem)
    {
 
        // Remove the unnecessary digits
        num = (parseInt( num/Math.pow(10, rem)));
 
        var sum = 0;
        while (num > 0)
        {
            sum += (num % 10);
            num = parseInt(num/10);
        }
        return sum;
    }
 
    // Function to return the sum
    // of the last n digits of num
    function sumFromEnd(num , n)
    {
        var sum = 0;
        for (i = 0; i < n; i++)
        {
            sum += (num % 10);
            num = parseInt(num/10);
        }
        return sum;
    }
 
    function getAverage(n , k , l) {
 
        // If the average can't be calculated without
        // using the same digit more than once
        var totalDigits = countDigits(n);
        if (totalDigits < (k + l))
            return -1;
 
        // Sum of the last l digits of n
        var sum1 = sumFromEnd(n, l);
 
        // Sum of the first k digits of n
        // (totalDigits - k) must be removed from the
        // end of the number to get the remaining
        // k digits from the beginning
        var sum2 = sumFromStart(n, k, totalDigits - k);
 
        // Return the average
        return ( (sum1 + sum2) /  (k + l));
    }
 
    // Driver code
    var n = 123456, k = 2, l = 3;
    document.write(getAverage(n, k, l));
 
// This code is contributed by Rajput-Ji
</script>
Producción: 

3.6

 

Publicación traducida automáticamente

Artículo escrito por mayanksrivastavaramji 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 *