Dadas 7 cajas vacías b1, b2, b3, b4, b5, b6, b7 y un número entero N , la tarea es encontrar la cantidad total de dinero que se puede colocar en las cajas después de N días según las siguientes condiciones:
- Cada día, el dinero se puede poner solo en una caja en forma circular b1, b2, b3, b4, b5, b6, b7, b1, b2, ….. y así sucesivamente.
- En la casilla b1 , ponga 1 más que el dinero ya presente en la casilla b1 .
- En cada casilla excepto b1 , ponga 1 más que el dinero presente en la casilla anterior.
Ejemplos:
Entrada: N = 4
Salida: 15
Explicación:
Poner dinero en la caja b1 el día 1 = 1
Poner dinero en la caja b2 el día 2 = 2
Poner dinero en la caja b3 el día 3 = 3
Poner dinero en la caja b4 el día 4 = 4
Poner dinero en la caja b5 el día 5 = 5
Después del 5to día, cantidad total = 1 + 2 + 3 + 4 + 5 = 15Entrada: N = 15
Salida: 66
Explicación: Después del día 15, la cantidad total = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 3 = 66
Enfoque: siga los pasos a continuación para resolver el problema
- El dinero gastado el día i es ((i – 1)/ 7) + ((i – 1) % 7 + 1), donde i se encuentra en el rango [1, N]
- Simule lo mismo para los días [1, N]
- Imprime el costo total.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for // the above approach #include <iostream> using namespace std; // Function to find the total money // placed in boxes after N days int totalMoney(int N) { // Stores the total money int ans = 0; // Iterate for N days for(int i = 0; i < N; i++) { // Adding the Week number ans += i / 7; // Adding previous amount + 1 ans += (i % 7 + 1); } // Return the total amount return ans; } // Driver code int main() { // Input int N = 15; // Function call to find // total money placed cout << totalMoney(N); } // This code is contributed khushboogoyal499
Java
// Java program for // the above approach import java.io.*; class GFG { // Function to find the total money // placed in boxes after N days public static int totalMoney(int N) { // Stores the total money int ans = 0; // Iterate for N days for (int i = 0; i < N; i++) { // Adding the Week number ans += i / 7; // Adding previous amount + 1 ans += (i % 7 + 1); } // Return the total amount return ans; } // Driver Code public static void main(String[] args) { // Input int N = 15; // Function call to find // total money placed System.out.println( totalMoney(N)); } }
Python
# Python program for # the above approach # Function to find the total money # placed in boxes after N days def totalMoney(N): # Stores the total money ans = 0 # Iterate for N days for i in range(0, N): # Adding the Week number ans += i / 7 # Adding previous amount + 1 ans += (i % 7 + 1) # Return the total amount return ans # Driver code # Input N = 15 # Function call to find # total money placed print(totalMoney(N)) # This code is contributed by shivanisinghss2110
C#
// C# program for // the above approach using System; class GFG{ // Function to find the total money // placed in boxes after N days public static int totalMoney(int N) { // Stores the total money int ans = 0; // Iterate for N days for(int i = 0; i < N; i++) { // Adding the Week number ans += i / 7; // Adding previous amount + 1 ans += (i % 7 + 1); } // Return the total amount return ans; } // Driver code static public void Main() { // Input int N = 15; // Function call to find // total money placed Console.WriteLine(totalMoney(N)); } } // This code is contributed by offbeat
Javascript
<script> // JavaScript Program to implement // the above approach // Function to find the total money // placed in boxes after N days function totalMoney(N) { // Stores the total money let ans = 0; // Iterate for N days for (let i = 0; i < N; i++) { // Adding the Week number ans += Math.floor(i / 7); // Adding previous amount + 1 ans += (i % 7 + 1); } // Return the total amount return ans; } // Driver Code // Input let N = 15; // Function call to find // total money placed document.write( totalMoney(N)); </script>
66
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Enfoque eficiente: el enfoque anterior se puede optimizar averiguando la cantidad de semanas completadas y la cantidad de días restantes en la última semana.
Siga los pasos para resolver el problema:
- Inicialice las variables X e Y , para almacenar la cantidad de dinero que se puede colocar en las semanas completas y semanas parciales respectivamente.
- El dinero en cada semana se puede calcular como:
- 1ª Semana : 1 2 3 4 5 6 7 = 28 + (7 x 0)
- 2ª Semana : 2 3 4 5 6 7 8 = 28 + (7 x 1)
- 3ra Semana: 3 4 5 6 7 8 9 = 28 + (7 x 2)
- 4ª Semana : 4 5 6 7 8 9 10 = 28 + (7 x 3) y así sucesivamente.
- Por lo tanto, actualice:
X = 28 + 7 x (Número de semanas completadas – 1)
Y = Suma de días restantes + (Número de semanas completas * Número de días restantes en la última semana) - Por lo tanto, la cantidad total es igual a X + Y. Imprime el monto total colocado.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ Program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to find total // money placed in the box int totalMoney(int N) { // Number of complete weeks int CompWeeks = N / 7; // Remaining days in // the last week int RemDays = N % 7; int X = 28 * CompWeeks + 7 * (CompWeeks * (CompWeeks - 1) / 2); int Y = RemDays * (RemDays + 1) / 2 + CompWeeks * RemDays; int cost = X + Y; cout << cost << '\n'; } // Driver Code int main() { // Input int N = 15; // Function call to find // the total money placed totalMoney(N); return 0; }
Java
// Java program for above approach import java.io.*; import java.lang.*; import java.util.*; class GFG { // Function to find total // money placed in the box static void totalMoney(int N) { // Number of complete weeks int CompWeeks = N / 7; // Remaining days in // the last week int RemDays = N % 7; int X = 28 * CompWeeks + 7 * (CompWeeks * (CompWeeks - 1) / 2); int Y = RemDays * (RemDays + 1) / 2 + CompWeeks * RemDays; int cost = X + Y; System.out.print(cost); } // Driver Code public static void main(String[] args) { // Input int N = 15; // Function call to find // the total money placed totalMoney(N); } } // This code is contributed by souravghosh0416.
C#
// C# program for the above approach using System; class GFG{ // Function to find total // money placed in the box static void totalMoney(int N) { // Number of complete weeks int CompWeeks = N / 7; // Remaining days in // the last week int RemDays = N % 7; int X = 28 * CompWeeks + 7 * (CompWeeks * (CompWeeks - 1) / 2); int Y = RemDays * (RemDays + 1) / 2 + CompWeeks * RemDays; int cost = X + Y; Console.WriteLine(cost); } // Driver Code public static void Main() { // Input int N = 15; // Function call to find // the total money placed totalMoney(N); } } // This code is contriobuted by sanjoy_62
Javascript
<script> // JavaScript Program to implement // the above approach // Function to find total // money placed in the box function totalMoney( N) { // Number of complete weeks let CompWeeks = Math.floor(N / 7); // Remaining days in // the last week let RemDays = N % 7; let X = 28 * CompWeeks + 7 * Math.floor((CompWeeks * (CompWeeks - 1) / 2)); let Y = RemDays * Math.floor((RemDays + 1) / 2) + CompWeeks * RemDays; let cost = X + Y; document.write(cost ,'<br>'); } // Driver Code // Input let N = 15; // Function call to find // the total money placed totalMoney(N); </script>
66
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)