C# – Soit 2 tableaux de n entiers chacun, trouvez une paire d’éléments issue des 2 tableaux {n1,n2} dont la somme se rapproche le plus d’une cible n.

Par défaut

Ce petit problème fort intéressant peut etre résolu de divers manières, mais j’ai voulu montrer comment on pouvait créer un dictionnaire en C# qui contient 2 clés, en utilisant les tuples.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Exercises

{

	class Program

	{

		static void ClosestToTarget(int[] array1, int[] array2, int target)

		{

			int i,
			j = 0;

			var dictionary = new Dictionary < Tuple  ,
			int > ();

			int x = 0;

			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];

					totals[i, j] = total;

					var key = new Tuple  (i, j);

					dictionary.Add(key, array1[i] + array2[j]);

				}

			}

			foreach(KeyValuePair < Tuple  , int > kvp in dictionary)

			{

				Console.WriteLine("Clé = {0},{1}", kvp.Key, kvp.Value);

			}

			var bestMatch = dictionary.OrderBy(e = >Math.Abs(e.Value - target)).FirstOrDefault();

			i = bestMatch.Key.Item1;

			j = bestMatch.Key.Item2;

			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);

		}

		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:");

			int size = 0;

			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];

			int i;

			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);

			Console.ReadLine();

		}

	}

}

https://dotnetfiddle.net/4cKdGc

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s