Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- class Program
- {
- public static IEnumerable<string> Formula(double[] numbers, bool[] used, double wanted, double last = 0)
- {
- if (Math.Abs(last - wanted) < 0.001)
- {
- yield return "";
- yield break;
- }
- for (int i = 0; i < numbers.Length; i++)
- {
- if (!used[i])
- {
- used[i] = true;
- var a = numbers[i];
- for (int j = 0; j < numbers.Length; j++)
- {
- if (!used[j])
- {
- var b = numbers[j];
- if (b > a || (a == b && j > i))
- {
- numbers[j] = a + b;
- foreach (var s in Formula(numbers, used, wanted, numbers[j]))
- yield return a + " + " + b + " = " + (a + b) + "\n" + s;
- numbers[j] = a * b;
- foreach (var s in Formula(numbers, used, wanted, numbers[j]))
- yield return a + " * " + b + " = " + (a * b) + "\n" + s;
- }
- numbers[j] = a - b;
- if (numbers[j] >= 0)
- foreach (var s in Formula(numbers, used, wanted, numbers[j]))
- yield return a + " - " + b + " = " + (a - b) + "\n" + s;
- numbers[j] = a / b;
- if (Math.Abs(numbers[j] - (int)numbers[j]) < 0.00001)
- foreach (var s in Formula(numbers, used, wanted, numbers[j]))
- yield return a + " / " + b + " = " + (a / b) + "\n" + s;
- numbers[j] = b;
- }
- }
- used[i] = false;
- }
- }
- }
- static void Main(string[] args)
- {
- var numbers = new double[] { 23, 46, 22, 74, 65 };
- var wanted = 829;
- // var numbers = new double[] {4,1,8,100,8,50};
- // var wanted = 589;
- numbers = numbers.OrderBy(a => a).ToArray();
- var used = numbers.Select(a => false).ToArray();
- var count = 0;
- var set = new HashSet<string>();
- foreach (var s in Formula(numbers, used, wanted))
- {
- count++;
- if (set.Add(String.Join("\n", s.Split('\n').OrderBy(a => a).ToArray())))
- Console.WriteLine(s);
- }
- Console.WriteLine(count);
- Console.WriteLine(set.Count);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment