Dada una array arr[] , la tarea es realizar operaciones aritméticas (+, -, *, /) en arr[] en secuencia. Estas operaciones se realizan en elementos adyacentes hasta que el tamaño de la array se reduce a 1 . Finalmente, devuelve el valor reducido y el número de operaciones necesarias para el mismo. Consulte los ejemplos para mayor claridad.
Ejemplos:
Entrada: arr = {12, 10, 2, 9, 1, 2}
Salida: Valor reducido: 10
Operaciones realizadas:
+ : 2
– : 1
* : 1
/ : 1Explicación:
Paso 1: realice la suma del elemento consecutivo [22, 12, 11, 10, 3]
Paso 2: realice la resta del elemento consecutivo [10, 1, 1, 7]
Paso 3: realice la multiplicación del elemento consecutivo [10, 1 , 7]
Paso 4: realice la división del elemento consecutivo [10, 0]
Paso 5: Realice nuevamente la suma del elemento consecutivo [10]
Entrada: arr = {5, -2, -1, 2, 4, 5}
Salida: Valor reducido: -3
Operaciones realizadas:
+ : 2
– : 2
* : 1
/ : 1
Enfoque: dado que en este problema tenemos que realizar operaciones basadas en la secuencia, como primero la suma, luego la resta, luego la multiplicación y luego la división, podemos usar Cambiar caso para resolver este problema.
Inicialice un diccionario donde el operador (+, -, *, /) como clave y 0 como valor. Usando las funciones add, sub, mul y div, se realizará la operación en la array. Tiene como función Operación que mapea el arreglo con funciones basadas en el valor de c%4 y devuelve el arreglo reducido. donde c realiza un seguimiento del número de operaciones realizadas. El diccionario realiza un seguimiento de cada operación realizada hasta que el tamaño de la array se reduce a 1 .
Siga los pasos a continuación para resolver el problema dado.
Paso 1: Asigne c a 1 y declare el diccionario d .
- Paso 2: si c% 4 == 1 , realice la operación de suma en elementos consecutivos utilizando la función Operación.
- Paso 3: si c% 4 == 2 , realice la operación de resta en el elemento consecutivo usando la función Operación.
- Paso 4: si c% 4 == 3 , realice la operación de multiplicación en elementos consecutivos usando la función Operación.
- Paso 5: si c% 4 == 0 , realice la operación de división en elementos consecutivos utilizando la función Operación.
- Paso 6: el paso 2 se repetirá hasta que el tamaño de la array sea igual a 1 .
- Paso 7: d se utiliza para realizar un seguimiento de cada operación realizada.
A continuación se muestra la implementación del enfoque anterior:
Python3
# Function for adding consecutive element def add(a): return [a[i]+a[i + 1] for i in range(len(a)-1)] # Function for subtracting consecutive element def sub(a): return [a[i] - a[i + 1] for i in range(len(a)- 1)] # Function for multiplication of consecutive element def mul(a): return [a[i] * a[i + 1] for i in range(len(a) - 1)] # Function for division of consecutive element def div(a): return [0 if a[i] == 0 or a[i + 1] == 0 \ else a[i]//a[i + 1] \ for i in range(len(a) - 1)] # Operation function which maps array # to corresponding function # based on value of i. def Operation(i, A): switcher = { 1: add, 2: sub, 3: mul, 0: div } func = switcher.get(i, lambda: 'Invalid') return func(A) # Driver Code c = 1 # dictionary value which keep track # of no of operation of each operator. d = {'+':0, '-':0, '*':0, '/':0 } arr =[5, -2, -1, 2, 1, 4, 5] # loop till size of array become equal to 1. while len(arr)!= 1: x = c % 4 # After each operation value # in dictionary value is incremented # also reduced array # is assigned to original array. if x == 1: d['+'] += 1 arr = Operation(x, arr) elif x == 2: d['-'] += 1 arr = Operation(x, arr) elif x == 3: d['*'] += 1 arr = Operation(x, arr) elif x == 0: d['/'] += 1 arr = Operation(x, arr) c += 1 # Printing reduced value print("Reduced value:", *arr) # Printing value of each operation # performed to reduce size of array to 1. print("Operations Performed:") for i in d.keys(): print(str(i) + " : " +str(d[i]))
Reduced value: -3 Operations Performed: + : 2 - : 2 * : 1 / : 1
Complejidad temporal: O(N)
Espacio auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por harshdeepmahajan88 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA