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: 0
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
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>
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