利用 1234567890这10个数字进行加减乘除等 算术
得到 2010
例如:2010 = 1+2-(3-4-5)*6*7*8-9+0
2010 = 12*34*5-6-7-8-9+0
等要求:
1234567890这10个数字必须用到
并且每个都只能使用一次

解决方案 »

  1.   

    想想自己也真是无聊。不带括号的解如下!using System;
    using System.Data;namespace ConsoleApplication4
    {
        class Program
        {
            static int[] Items = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
            static string[] Operators = new string[] { "+", "-", "*", "/", "" };
            static DataTable Computer = new DataTable();        public static void Main(string[] args)
            {
                Solve(1, "1");
            }        static void Solve(int currentIndex, string exp)
            {
                if(currentIndex == 10)
                {
                    object value = Computer.Compute(exp, null);
                    if ((value is int && (int)value == 2010) || (value is double && (double)value == 2010))
                        Console.WriteLine("{0} = 2010", exp);
                    return;
                }            for (int i = 0; i < 5; i++)
                    Solve(currentIndex + 1, exp + Operators[i] + Items[currentIndex]);
             }
        }
    }
      

  2.   

    权限问题:   
      当<identity   impersonate="true"   />存在时,用到的权限是IIS中的匿名帐号   
      当没有以上配置时,用到的权限是Win2000:ASPNET帐号,Win2003:Network   Service   
      你必须对要操作的文件夹或组件添上相应的权限(如读或写权限)   
      你在本机上试的时候可能用了集成Windows身份验证,所以可能是管理员权限   参考
    参考
      

  3.   

    嗯,以前没用过,DataTable的compute确实太慢了,所以没敢把括号加上。
    换一个能算表达式的,应该能够快不少。程序本身用的是最土的方法,没什么牛的,连雕虫小技可能都算不上吧,仅供大家娱乐了。
    想快的话恐怕需要用一些类似DP的方法,或者利用波兰表达式(逆波兰也可),弄个双向搜索。