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