logo

Agregar elementos de matrices dadas con restricciones dadas

Dadas dos matrices de números enteros, agregue sus elementos a la tercera matriz satisfaciendo las siguientes restricciones: 

  1. La suma debe realizarse a partir del índice 0 de ambas matrices. 
  2. Divida la suma si no es un número de un solo dígito y almacene los dígitos en ubicaciones adyacentes en la matriz de salida. 
  3. La matriz de salida debe acomodar los dígitos restantes de la matriz de entrada más grande.

Ejemplos:  



  Input:    a = [9 2 3 7 9 6] b = [3 1 4 7 8 7 6 9]   Output:    [1 2 3 7 1 4 1 7 1 3 6 9]   Input:    a = [9343 2 3 7 9 6] b = [34 11 4 7 8 7 6 99]   Output:    [9 3 7 7 1 3 7 1 4 1 7 1 3 6 9 9]   Input:    a = [] b = [11 2 3 ]   Output:    [1 1 2 3 ]   Input:    a = [9 8 7 6 5 4 3 2 1] b = [1 2 3 4 5 6 7 8 9]   Output:    [1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0]

Nivel de dificultad: Novato

La idea es muy simple. Mantenemos una matriz de salida y ejecutamos un bucle desde el índice 0 de ambas matrices. Para cada iteración del bucle, consideramos los siguientes elementos en ambas matrices y los agregamos. Si la suma es mayor que 9, enviamos los dígitos individuales de la suma a la matriz de salida; de lo contrario, enviamos la suma misma. Finalmente, empujamos los elementos restantes de la matriz de entrada más grande a la matriz de salida.

A continuación se muestra la implementación de la idea anterior: 



quien es freddie mercury
C++
// C++ program to add two arrays following given // constraints #include   using namespace std; // Function to push individual digits of a number // to output vector from left to right void split(int num vector<int> &out) {  vector<int> arr;  while (num)  {  arr.push_back(num%10);  num = num/10;  }  // reverse the vector arr and append it to output vector  out.insert(out.end() arr.rbegin() arr.rend()); } // Function to add two arrays keeping given // constraints void addArrays(int arr1[] int arr2[] int m int n) {  // create a vector to store output  vector<int> out;  // maintain a variable to store current index in  // both arrays  int i = 0;  // loop till arr1 or arr2 runs out  while (i < m && i < n)  {  // read next elements from both arrays and  // add them  int sum = arr1[i] + arr2[i];  // if sum is single digit number  if (sum < 10)  out.push_back(sum);  else  {  // if sum is not a single digit number push  // individual digits to output vector  split(sum out);  }  // increment to next index  i++;  }  // push remaining elements of first input array  // (if any) to output vector  while (i < m)  split(arr1[i++] out);  // push remaining elements of second input array  // (if any) to output vector  while (i < n)  split(arr2[i++] out);  // print the output vector  for (int x : out)  cout << x << ' '; } // Driver code int main() {  int arr1[] = {9343 2 3 7 9 6};  int arr2[] = {34 11 4 7 8 7 6 99};  int m = sizeof(arr1) / sizeof(arr1[0]);  int n = sizeof(arr2) / sizeof(arr2[0]);  addArrays(arr1 arr2 m n);  return 0; } 
Java
// Java program to add two arrays following given  // constraints  import java.util.Vector; class GFG {  // Function to push individual digits of a number  // to output vector from left to right  static void split(int num Vector<Integer> out)   {  Vector<Integer> arr = new Vector<>();  while (num > 0)  {  arr.add(num % 10);  num /= 10;  }  // reverse the vector arr and  // append it to output vector  for (int i = arr.size() - 1; i >= 0; i--)  out.add(arr.elementAt(i));  }  // Function to add two arrays keeping given  // constraints  static void addArrays(int[] arr1 int[] arr2  int m int n)   {  // create a vector to store output  Vector<Integer> out = new Vector<>();  // maintain a variable to store  // current index in both arrays  int i = 0;  // loop till arr1 or arr2 runs out  while (i < m && i < n)   {  // read next elements from both arrays   // and add them  int sum = arr1[i] + arr2[i];  // if sum is single digit number  if (sum < 10)  out.add(sum);  else  // if sum is not a single digit number   // push individual digits to output vector  split(sum out);  // increment to next index  i++;  }  // push remaining elements of first input array  // (if any) to output vector  while (i < m)  split(arr1[i++] out);  // push remaining elements of second input array  // (if any) to output vector  while (i < n)  split(arr2[i++] out);  // print the output vector  for (int x : out)  System.out.print(x + ' ');  }  // Driver Code  public static void main(String[] args)   {  int[] arr1 = { 9343 2 3 7 9 6 };  int[] arr2 = { 34 11 4 7 8 7 6 99 };  int m = arr1.length;  int n = arr2.length;  addArrays(arr1 arr2 m n);  } } // This code is contributed by // sanjeev2552 
Python3
# Python program to add two arrays # following given constraints # Function to push individual digits  # of a number to output list from # left to right def split(num out): arr = [] while num: arr.append(num % 10) num = num // 10 for i in range(len(arr) - 1 -1 -1): out.append(arr[i]) # Function to add two arrays keeping given # constraints def add_arrays(arr1 arr2 m n): # Create a list to store output out = [] # Maintain a variable to store  # current index in both arrays i = 0 # Loop till arr1 or arr2 runs out while i < m and i < n: # Read next elements from both  # arrays and add them sum = arr1[i] + arr2[i] # If sum is single digit number if sum < 10: out.append(sum) else: # If sum is not a single digit  # number push individual digits # to output list split(sum out) # Increment to next index i += 1 # Push remaining elements of first  # input array (if any) to output list while i < m: split(arr1[i] out) i += 1 # Push remaining elements of second # input array (if any) to output list while i < n: split(arr2[i] out) i += 1 # Print the output list for x in out: print(x end = ' ') # Driver code arr1 = [9343 2 3 7 9 6] arr2 = [34 11 4 7 8 7 6 99] m = len(arr1) n = len(arr2) add_arrays(arr1 arr2 m n) # This code is contributed by akashish__ 
C#
// C# program to add two arrays following given  // constraints  using System; using System.Collections.Generic; class GFG  {   // Function to push individual digits of a number   // to output vector from left to right   static void split(int num List<int> outs)   {   List<int> arr = new List<int>();   while (num > 0)   {   arr.Add(num % 10);   num /= 10;   }   // reverse the vector arr and   // append it to output vector   for (int i = arr.Count - 1; i >= 0; i--)   outs.Add(arr[i]);   }   // Function to add two arrays keeping given   // constraints   static void addArrays(int[] arr1 int[] arr2   int m int n)   {   // create a vector to store output   List<int> outs = new List<int>();   // maintain a variable to store   // current index in both arrays   int i = 0;   // loop till arr1 or arr2 runs out   while (i < m && i < n)   {   // read next elements from both arrays   // and add them   int sum = arr1[i] + arr2[i];   // if sum is single digit number   if (sum < 10)   outs.Add(sum);   else  // if sum is not a single digit number   // push individual digits to output vector   split(sum outs);   // increment to next index   i++;   }   // push remaining elements of first input array   // (if any) to output vector   while (i < m)   split(arr1[i++] outs);   // push remaining elements of second input array   // (if any) to output vector   while (i < n)   split(arr2[i++] outs);   // print the output vector   foreach (int x in outs)   Console.Write(x + ' ');   }   // Driver Code   public static void Main(String[] args)   {   int[] arr1 = { 9343 2 3 7 9 6 };   int[] arr2 = { 34 11 4 7 8 7 6 99 };   int m = arr1.Length;   int n = arr2.Length;   addArrays(arr1 arr2 m n);   }  }  // This code is contributed by PrinciRaj1992 
JavaScript
<script> // Javascript program to add two arrays // following given constraints // Function to push individual digits  // of a number to output vector from // left to right function split(num out) {  let arr = [];  while (num)   {  arr.push(num % 10);  num = Math.floor(num / 10);  }  for(let i = arr.length - 1; i >= 0; i--)  out.push(arr[i]); } // Function to add two arrays keeping given // constraints function addArrays(arr1 arr2 m n)  {    // Create a vector to store output  let out = [];  // Maintain a variable to store   // current index in both arrays  let i = 0;  // Loop till arr1 or arr2 runs out  while (i < m && i < n)  {    // Read next elements from both   // arrays and add them  let sum = arr1[i] + arr2[i];  // If sum is single digit number  if (sum < 10)  out.push(sum);  else   {    // If sum is not a single digit   // number push individual digits  // to output vector  split(sum out);  }  // Increment to next index  i++;  }    // Push remaining elements of first   // input array (if any) to output vector  while (i < m)  split(arr1[i++] out);  // Push remaining elements of second  // input array (if any) to output vector  while (i < n)  split(arr2[i++] out);  // Print the output vector  for(let x of out)  document.write(x + ' '); } // Driver code let arr1 = [ 9343 2 3 7 9 6 ]; let arr2 = [ 34 11 4 7 8 7 6 99 ]; let m = arr1.length; let n = arr2.length; addArrays(arr1 arr2 m n); // This code is contributed by _saurabh_jaiswal </script> 

Producción
9 3 7 7 1 3 7 1 4 1 7 1 3 6 9 9 


Complejidad del tiempo de la solución anterior es O(m + n) ya que atravesamos ambas matrices exactamente una vez.

Método 2 (usando String y STL):

En este enfoque tomaremos una cadena llamada 'ans'. a medida que agregamos el elemento de ambas matrices, la suma resultante se convertirá en una cadena y a esta cadena se le agregará la cadena principal 'ans'.



Después de hacer esto para todos los elementos, tomaremos un vector, transferiremos toda la cadena a ese vector y finalmente imprimiremos ese vector.

creación de listas en java

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

C++
// C++ program to add two arrays // following given constrains #include    using namespace std; // function to add two arrays // following given constrains void creat_new(int arr1[] int arr2[] int n int m) {  string ans;  int i = 0;  while (i < min(n m)) {  // adding the elements  int sum = arr1[i] + arr2[i];  // converting the integer to string  string s = to_string(sum);  // appending the string  ans += s;  i++;  }  // entering remaining element(if any) of  // first array  for (int j = i; j < n; j++) {  string s = to_string(arr1[j]);  ans += s;  }  // entering remaining element (if any) of  // second array  for (int j = i; j < m; j++) {  string s = to_string(arr2[j]);  ans += s;  }  // taking vector  vector<int> k;  // assigning the elements of string  // to vector  for (int i = 0; i < ans.length(); i++) {  k.push_back(ans[i] - '0');  }  // printing the elements of vector  for (int i = 0; i < k.size(); i++) {  cout << k[i] << ' ';  } } // driver code int main() {  int arr1[] = { 9 2 3 7 9 6 };  int arr2[] = { 3 1 4 7 8 7 6 9 };  int n = sizeof(arr1) / sizeof(arr1[0]);  int m = sizeof(arr2) / sizeof(arr2[0]);  // function call  creat_new(arr1 arr2 n m);  return 0; } // this code is contributed by Machhaliya Muhammad 
Java
/*package whatever //do not write package name here */ import java.util.*; class GFG {  // function to add two arrays  // following given constrains  static void creat_new(int arr1[] int arr2[] int n  int m)  {  String ans = '';  int i = 0;  while (i < Math.min(n m))   {  // adding the elements  int sum = arr1[i] + arr2[i];  // converting the integer to string  String s = sum + '';  // appending the string  ans += s;  i++;  }  // entering remaining element(if any) of  // first array  for (int j = i; j < n; j++) {  String s = arr1[j] + '';  ans += s;  }  // entering remaining element (if any) of  // second array  for (int j = i; j < m; j++) {  String s = arr2[j] + '';  ans += s;  }  // taking vector  ArrayList<Integer> k = new ArrayList<>();  // assigning the elements of string  // to vector  for (int j = 0; j < ans.length(); j++) {  k.add(ans.charAt(j) - '0');  }  // printing the elements of vector  for (int j = 0; j < k.size(); j++) {  System.out.print(k.get(j) + ' ');  }  }  public static void main(String[] args)  {  int arr1[] = { 9 2 3 7 9 6 };  int arr2[] = { 3 1 4 7 8 7 6 9 };  int n = arr1.length;  int m = arr2.length;  // function call  creat_new(arr1 arr2 n m);  } } // This code is contributed by aadityaburujwale. 
Python3
import math class GFG : # function to add two arrays # following given constrains @staticmethod def creat_new( arr1 arr2 n m) : ans = '' i = 0 while (i < min(nm)) : # adding the elements sum = arr1[i] + arr2[i] # converting the integer to string s = str(sum) + '' # appending the string ans += s i += 1 # entering remaining element(if any) of # first array j = i while (j < n) : s = str(arr1[j]) + '' ans += s j += 1 # entering remaining element (if any) of # second array j = i while (j < m) : s = str(arr2[j]) + '' ans += s j += 1 # taking vector k = [] # assigning the elements of string # to vector j = 0 while (j < len(ans)) : k.append(ord(ans[j]) - ord('0')) j += 1 # printing the elements of vector j = 0 while (j < len(k)) : print(k[j]end=' ') j += 1 @staticmethod def main( args) : arr1 = [9 2 3 7 9 6] arr2 = [3 1 4 7 8 7 6 9] n = len(arr1) m = len(arr2) # function call GFG.creat_new(arr1 arr2 n m) if __name__=='__main__': GFG.main([]) # This code is contributed by aadityaburujwale. 
C#
// Include namespace system using System; using System.Collections.Generic; public class GFG {  // function to add two arrays  // following given constrains  public static void creat_new(int[] arr1 int[] arr2 int n int m)  {  var ans = '';  var i = 0;  while (i < Math.Min(nm))  {  // adding the elements  var sum = arr1[i] + arr2[i];  // converting the integer to string  var s = sum.ToString() + '';  // appending the string  ans += s;  i++;  }  // entering remaining element(if any) of  // first array  for (int j = i; j < n; j++)  {  var s = arr1[j].ToString() + '';  ans += s;  }  // entering remaining element (if any) of  // second array  for (int j = i; j < m; j++)  {  var s = arr2[j].ToString() + '';  ans += s;  }  // taking vector  var k = new List<int>();  // assigning the elements of string  // to vector  for (int j = 0; j < ans.Length; j++)  {  k.Add((int)(ans[j]) - (int)('0'));  }  // printing the elements of vector  for (int j = 0; j < k.Count; j++)  {  Console.Write(k[j] + ' ');  }  }  public static void Main(String[] args)  {  int[] arr1 = {9 2 3 7 9 6};  int[] arr2 = {3 1 4 7 8 7 6 9};  var n = arr1.Length;  var m = arr2.Length;  // function call  GFG.creat_new(arr1 arr2 n m);  } } // This code is contributed by aadityaburujwale. 
JavaScript
// JavaScript Code // function to add two arrays // following given constrains const creat_new = (arr1 arr2 n m) => {  let ans = '';  let i = 0;  while (i < Math.min(n m))   {    // adding the elements  let sum = arr1[i] + arr2[i];    // converting the integer to string  let s = sum.toString();    // appending the string  ans += s;  i++;  }    // entering remaining element(if any) of  // first array  for (let j = i; j < n; j++) {  let s = arr1[j].toString();  ans += s;  }    // entering remaining element (if any) of  // second array  for (let j = i; j < m; j++) {  let s = arr2[j].toString();  ans += s;  }    // taking vector  let k = [];    // assigning the elements of string  // to vector  for (let i = 0; i < ans.length; i++) {  k.push(parseInt(ans[i]));  }    // printing the elements of vector  console.log(k); } // Driver code let arr1 = [9 2 3 7 9 6]; let arr2 = [3 1 4 7 8 7 6 9]; let n = arr1.length; let m = arr2.length; // function call creat_new(arr1 arr2 n m); // This code is contributed by akashish__ 

Producción
1 2 3 7 1 4 1 7 1 3 6 9 

Complejidad del tiempo: O(máx(mn))

Espacio auxiliar:O(m+n) ya que se está creando el vector k (de tamaño m+n en el peor de los casos).