[ACM]Q10375: Choose and divide

[ACM]Q10375: Choose and divide


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;
using System.Collections;

namespace Q10375
{
    class Program
    {
        static private int[] iarr; static private char[] par = { ' ' };
        static private int temp1, temp2; static private BigInteger t0, t1, t2, t3, t4, t5, s1, s2;
        static void Main(string[] args)
        {
            for (; ; )
            {
            label: Console.Write("Integer>>>");
                try
                {
                    iarr = Array.ConvertAll<string, int>(Console.ReadLine().Split(par, StringSplitOptions.RemoveEmptyEntries), int.Parse);
                    if (iarr.Length != 4) throw new Exception();
                }
                catch
                {
                    goto label;
                }
                t1 = t2 = t3 = t0 = t4 = t5 = 1;
                iarr[1] = iarr[1] > iarr[0] - iarr[1] ? iarr[0] - iarr[1] : iarr[1];
                iarr[3] = iarr[3] > iarr[2] - iarr[1] ? iarr[2] - iarr[3] : iarr[3];
                temp1 = iarr[0] - iarr[1]; temp2 = iarr[2] - iarr[3];
                if (iarr[0] > iarr[2])
                {
                    if (iarr[1] > iarr[3])
                        for (int i = 0; i < iarr[1] - iarr[3]; i++)
                            t1 *= (iarr[1] - i);
                    else if (iarr[1] == iarr[3]) t1 = t4 = 1;
                    else for (int i = 0; i < iarr[3] - iarr[1]; i++)
                            t4 *= (iarr[3] - i);
                    if (temp1 > temp2)
                        for (int i = 0; i < temp1 - temp2; i++)
                            t2 *= (temp1 - i);
                    else if (temp1 == temp2) t2 = t5 = 1;
                    else for (int i = 0; i < temp2 - temp1; i++)
                            t5 *= (temp2 - i);
                    for (int i = 0; i < iarr[0] - iarr[2]; i++)
                        t0 *= (iarr[0] - i);
                }
                else if (iarr[0] == iarr[2])
                {
                    if (iarr[1] > iarr[3])
                        for (int i = 0; i < iarr[1] - iarr[3]; i++)
                            t1 *= (iarr[1] - i);
                    else if (iarr[1] == iarr[3]) t1 = t4 = 1;
                    else for (int i = 0; i < iarr[3] - iarr[1]; i++)
                            t4 *= (iarr[3] - i);
                    if (temp1 > temp2)
                        for (int i = 0; i < temp1 - temp2; i++)
                            t2 *= (temp1 - i);
                    else if (temp1 == temp2) t2 = t5 = 1;
                    else for (int i = 0; i < temp2 - temp1; i++)
                            t5 *= (temp2 - i);
                }
                else
                {
                    if (iarr[1] > iarr[3])
                        for (int i = 0; i < iarr[1] - iarr[3]; i++)
                            t1 *= (iarr[1] - i);
                    else if (iarr[1] == iarr[3]) t1 = t4 = 1;
                    else for (int i = 0; i < iarr[3] - iarr[1]; i++)
                            t4 *= (iarr[3] - i);
                    if (temp1 > temp2)
                        for (int i = 0; i < temp1 - temp2; i++)
                            t2 *= (temp1 - i);
                    else if (temp1 == temp2) t2 = t5 = 1;
                    else for (int i = 0; i < temp2 - temp1; i++)
                            t5 *= (temp2 - i);
                    for (int i = 0; i < iarr[2] - iarr[0]; i++)
                        t3 *= (iarr[2] - i);
                }
                Console.WriteLine("Ans={0}", Math.Round((double)(t0 * t4 * t5) / (double)(t1 * t2 * t3), 5).ToString("0.00000"));
            }
        }
    }
    public class Q10365
    {
        private int times, n; private bool ttof, ntof, tof; private ArrayList lst = new ArrayList(); private int[] iarr;
        public Q10365()
        {
            for (; ; )
            {
            labelt: Console.Write("times>>>");
                ttof = int.TryParse(Console.ReadLine(), out times);
                if (!ttof) goto labelt;
                iarr = new int[times]; int count = 0;
                while (count < times)
                {
                labeln: Console.Write("n>>>");
                    ntof = int.TryParse(Console.ReadLine(), out n);
                    if (!ntof) goto labeln;
                    for (int i = 1; i <= n; i++)
                    {
                        tof = false;
                        for (int j = 1; j <= i; j++)
                        {
                            if (i * j > n) break;
                            for (int k = 1; k <= j; k++)
                            {
                                if (i * j * k > n) break;
                                if (i * j * k == n)
                                {
                                    lst.Add(2 * (i * j + i * k + j * k));
                                    tof = true;
                                    break;
                                }
                            }
                            if (tof) break;
                        }
                    }
                    lst.Sort();
                    iarr[count] = (int)lst[0];
                    lst.Clear();
                    count++;
                }
                foreach (int obj in iarr) Console.WriteLine(obj);
            }
        }
    }
}