C# using System; using System.Collections.Generic;
namespace Challenge.Intermediate.Countdown
{
class MainClass
{
public static void Main (string[] args)
{
string input = Console.ReadLine ();
String[] substrings = input.Split(' ');
int[] number = new int[6];
for (int i = 0; i < 6; i++) {
number[i] = int.Parse (substrings[i]);
}
int result = int.Parse (substrings[7]);
permute (number, 0, 5, result);
}
static void permute(int[] arry, int i, int n, int result)
{
int j;
if (i == n) {
mutate (arry, result);
}
else
{
for(j = i; j <=n; j++)
{
swap(ref arry[i],ref arry[j]);
permute(arry,i+1,n, result);
swap(ref arry[i], ref arry[j]); //backtrack
}
}
}
static void swap(ref int a, ref int b)
{
int tmp;
tmp = a;
a=b;
b = tmp;
}
static void mutate(int[] numbers, int result){
string ops = "+-*/";
for (int i = 0; i < 4; i++) {
int output = numbers[0];
switch (ops[i]) {
case '+': output = output + numbers[1]; break;
case '-': output = output - numbers[1]; break;
case '*': output = output * numbers[1]; break;
case '/': output = output / numbers[1]; break;
}
for (int j = 0; j < 4; j++) {
int output1 = output;
if (output1 == 0)break;
switch (ops[j]) {
case '+': output1 = output1 + numbers[2]; break;
case '-': output1 = output1 - numbers[2]; break;
case '*': output1 = output1 * numbers[2]; break;
case '/': output1 = output1 / numbers[2]; break;
}
for (int k = 0; k < 4; k++) {
int output2 = output1;
if (output2 == 0)break;
switch (ops[k]) {
case '+': output2 = output2 + numbers[3]; break;
case '-': output2 = output2 - numbers[3]; break;
case '*': output2 = output2 * numbers[3]; break;
case '/': output2 = output2 / numbers[3]; break;
}
for (int l = 0; l < 4; l++) {
int output3 = output2;
if (output3 == 0)break;
switch (ops[l]) {
case '+': output3 = output3 + numbers[4]; break;
case '-': output3 = output3 - numbers[4]; break;
case '*': output3 = output3 * numbers[4]; break;
case '/': output3 = output3 / numbers[4]; break;
}
for (int m = 0; m < 4; m++) {
int output4 = output3;
if (output1 == 0)break;
switch (ops[m]) {
case '+': output4 = output4 + numbers[5]; break;
case '-': output4 = output4 - numbers[5]; break;
case '*': output4 = output4 * numbers[5]; break;
case '/': output4 = output4 / numbers[5]; break;
}
if (output4==result) Console.WriteLine ("((((" + numbers [0] + ops [i] + numbers [1] + ")" + ops [j] + numbers [2] + ")" + ops [k] + numbers [3] + ")" + ops [l] + numbers [4] + ")" + ops [m] + numbers [5] + " = " + output4);
}
}
}
}
}
}
}
}