Problema de distribución de pasteles

Dados dos números enteros N y M , donde N es el número de amigos sentados en el sentido de las agujas del reloj en un círculo y M es el número de pasteles. La tarea es calcular el número restante de pasteles después de distribuir i pasteles a i’th amigo. La distribución de pasteles se detendrá si el recuento de pasteles es menor que la cantidad requerida.
Ejemplos: 
 

Entrada: N = 4, M = 11 
Salida:
1ra ronda: 
El 1er amigo recibe 1 torta, el 2do recibe 2 tortas, 
el 3ro recibe 3 y el 4to recibe 4 tortas. 
Pasteles restantes = 11 – (1 + 2 + 3 + 4) = 1 
2da ronda: 
Esta vez solo el 1er amigo obtiene el 1 pastel restante. 
Pasteles restantes = 1 – 1 = 0
Entrada: N = 3, M = 8 
Salida:
1.ª ronda: 
El 1.er amigo recibe 1 pastel, el 2.º recibe 2 pasteles 
y el 3.º recibe 3 pasteles. 
Pasteles restantes = 8 – (1 + 2 + 3) = 2 
2da ronda: 
Esta vez solo el 1er amigo obtiene el 1 pastel restante, 
y luego no queda pastel para el 2do amigo. 
Pasteles restantes = 2 – 1 = 1 
 

Acercarse: 
 

  • Compruebe cuántos ciclos de distribución de pasteles son posibles a partir de m número de pasteles.
  • Calcular el número de tortas para 1 ciclo que es 
     
sum = n * (n + 1) / 2
  • Ahora, sumergiendo M por suma, obtenemos el recuento de ciclos + algún resto.
  • Ahora compruebe cuántos pasteles restantes se pueden distribuir nuevamente a x amigos.
  • El valor de x se puede lograr fácilmente resolviendo la ecuación cuadrática 
     
remainder = x * (x + 1) / 2

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

C++

// C++ implementation of the approach
#include<bits/stdc++.h>
using namespace std;
 
// Function to return the
// remaining count of cakes
int cntCakes(int n, int m)
{
 
    // Sum for 1 cycle
    int sum = (n * (n + 1)) / 2;
 
    // no. of full cycle and remainder
    int quo = m/sum ;
    int rem = m % sum ;
    double ans = m - quo * sum ;
 
    double x = (-1 + pow((8 * rem) + 1, 0.5)) / 2;
     
    ans = ans - x * (x + 1) / 2;
 
    return int(ans);
}
 
// Driver Code
int main ()
{
    int n = 3;
    int m = 8;
    int ans = cntCakes(n, m);
    cout << (ans);
}
 
// This code is contributed by Surendra_Gangwar

Java

// Java implementation of the approach
class GFG
{
     
    // Function to return the
    // remaining count of cakes
    static int cntCakes(int n, int m)
    {
     
        // Sum for 1 cycle
        int sum = (n * (n + 1)) / 2;
     
        // no. of full cycle and remainder
        int quo = m/sum ;
        int rem = m % sum ;
        double ans = m - quo * sum ;
     
        double x = (-1 + Math.pow((8 * rem) + 1, 0.5)) / 2;
         
        ans = ans - x * (x + 1) / 2;
     
        return (int)ans;
    }
 
    // Driver Code
    public static void main (String[] args)
    {
        int n = 3;
        int m = 8;
        int ans = cntCakes(n, m);
        System.out.println(ans);
    }
}
 
// This code is contributed by AnkitRai01

Python3

# Python3 implementation of the approach
 
# Function to return the
# remaining count of cakes
def cntCakes(n, m):
 
    # Sum for 1 cycle
    sum = (n*(n + 1))//2
 
    # no. of full cycle and remainder
    quo, rem = m//sum, m % sum
    ans = m - quo * sum
 
    x = int((-1 + (8 * rem + 1)**0.5)/2)
    ans = ans - x*(x + 1)//2
 
    return ans
 
# Driver code
def main():
  n = 4
  m = 11
  ans = cntCakes(n, m)
  print(ans)
 
main()

C#

// C# implementation of the approach
using System;
 
class GFG
{
    // Function to return the
    // remaining count of cakes
    static int cntCakes(int n, int m)
    {
     
        // Sum for 1 cycle
        int sum = (n * (n + 1)) / 2;
     
        // no. of full cycle and remainder
        int quo = m/sum ;
        int rem = m % sum ;
        double ans = m - quo * sum ;
     
        double x = (-1 + Math.Pow((8 * rem) + 1, 0.5)) / 2;
         
        ans = ans - x * (x + 1) / 2;
     
        return (int)ans;
    }
 
    // Driver Code
    static public void Main ()
    {
        int n = 3;
        int m = 8;
        int ans = cntCakes(n, m);
        Console.Write(ans);
    }
}
 
// This code is contributed by ajit.

Javascript

<script>
    // Javascript implementation of the approach
     
    // Function to return the
    // remaining count of cakes
    function cntCakes(n, m)
    {
       
        // Sum for 1 cycle
        let sum = (n * (n + 1)) / 2;
       
        // no. of full cycle and remainder
        let quo = m/sum;
        let rem = m % sum ;
        let ans = m - quo * sum + 6;
       
        let x = (-1 + Math.pow((8 * rem) + 1, 0.5));
           
        ans = ans - x * (x + 1) / 2;
       
        return parseInt(ans, 10);
    }
     
    let n = 3;
    let m = 8;
    let ans = cntCakes(n, m);
    document.write(ans);
 
// This code is contributed by suresh07.
</script>
Producción: 

0

 

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)
 

Publicación traducida automáticamente

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