This comment is reply for 4382 shinh: それなりに速く終わるやつを。手元で1秒切...(正しい文(クイズ)). Go to thread root.
matarillo #5713(2008/02/09 03:08 GMT) [ C# ] Rating0/0=0.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
const string ALNUM = "0123456789abcdefghijklmnopqrstuvwxyz"; static void Main(string[] args) { for (int i = 2; i <= 16; i++) { Console.WriteLine(i); int[] a = new int[i]; int[] b = new int[i]; for (int j = 0; j < i; j++) b[j] = 1; x(i, a, 0, b, 0); } Console.ReadKey(); } static void x(int b, int[] a, int n, int[] e, int z) { if (b == n) { if (Eq(a, e)) { for (int i = 0; i < b; i++) { if (i > 0) Console.Write(", "); Console.Write("{0}*{1}", ToS(i, b), ToS(a[i], b)); } Console.WriteLine(); } } else { int m = b < 5 ? 5 : new List<int> { n > 1 ? new List<int> { 4 - n, 0 }.Max() + e[n] : 99, b + 2 - z + n }.Min(); for (int i = 1; i <= m; i++) { a[n] = i; int[] f = e.Clone() as int[]; foreach (char c in ToS(i, b)) { f[ToI(c, b)]++; } if (Range(0, n).Any(j => f[j] > a[j])) continue; x(b, a, n + 1, f, z + i); } } } static bool Eq(int[] a, int[] b) { if (a == null || b == null) return (a == b); if (a.Length != b.Length) return false; for (int i = 0; i < a.Length; i++) if (a[i] != b[i]) return false; return true; } static string ToS(int i, int b) { char[] c = ALNUM.ToCharArray(); var sb = new StringBuilder(); for (; i > 0; i /= b) sb.Insert(0, c[i % b]); return sb.Length > 0 ? sb.ToString() : "0"; } static int ToI(char c, int b) { return ALNUM.IndexOf(c); } static IEnumerable<int> Range(int s, int e) { for (int i = s; i <= e; i++) yield return i; }
Rating0/0=0.00-0+
[ reply ]
matarillo
#5713()
[
C#
]
Rating0/0=0.00
Rating0/0=0.00-0+