using System.Collections.Generic;
using System.Threading.Tasks;
static void ClosestToTarget(int[] array1, int[] array2, int target)
var dictionary = new Dictionary<Tuple<int, int>, int>();
int[, ] totals = new int[array1.Length, array2.Length];
for (i = 0; i < array1.Length; i++)
for (j = 0; j < array2.Length; j++)
int total = array1[i] + array2[j];
var key = new Tuple<int, int>(i, j);
dictionary.Add(key, array1[i] + array2[j]);
foreach (KeyValuePair<Tuple<int, int>, int> kvp in dictionary)
Console.WriteLine("Clé = {0},{1}", kvp.Key, kvp.Value);
var bestMatch = dictionary.OrderBy(e => Math.Abs(e.Value - target)).FirstOrDefault();
Console.WriteLine("Elément issu du premier tableau : {0} , Elément issu du deuxième tableau : {1}, La Somme = {2} qui se rapproche le plus de la cible : {3}", array1[i], array2[j], array1[i] + array2[j], target);
public static void Main(string[] args)
Console.WriteLine("Ce programme prend en entré 2 tableau de taille n et vous donne quel pairs d'éléments des 2 tableaux se rapproche le plus d'une cible x");
Console.WriteLine("Veuillez entrer la taille des tableaux:");
while (!int.TryParse(Console.ReadLine(), out size))
Console.Write("Attention, la valeur doit être un entier. Veuillez réessayer");
int[] array1 = new int[size];
int[] array2 = new int[size];
Console.WriteLine("Entrez les {0} chiffres pour le premier tableau:", size);
for (i = 0; i < size; i++)
while (!int.TryParse(Console.ReadLine(), out array1[i]))
Console.Write("Attention, la valeur doit être un entier. Veuillez réessayer");
Console.WriteLine("Entrez les {0} chiffres pour le deuxième tableau:", size);
for (i = 0; i < size; i++)
while (!int.TryParse(Console.ReadLine(), out array2[i]))
Console.Write("Attention, la valeur doit être un entier. Veuillez réessayer");
Console.WriteLine("Entrez la cible:");
int target = Convert.ToInt32(Console.ReadLine());
ClosestToTarget(array1, array2, target);