今天看到一道题 abcd*e=fghi (其中a,b,c,d,e,f,g,h,i 刚好是1~9中的数字) 用程序求出他们的值,其实这样类似的题 在中学会经常遇到,不过那时的解法大概都是乱猜,把数字才出来,有时运气好点一会就能才出答案,有时就会很费时间,今天学了程序,就用程序解解,首先是建模,有9个变量,每个都有可能是1~9中的数,我首先想到的for 循环 条件就是他们各不相同,下面开始写程序了

 

        static void Main(string[] args)
        {
    //定义要用到的变量 abcd是四位数,fghi是得出的四位数
            int a = 0, b = 0, c = 0, d = 0, e = 0, f, g, h, i, abcd, fghi; 
            for (a = 1; a < 10; a++)
                for (b = 1; b < 10; b++)
                {
                    if (b == a)              //a与b不能重复
                    {
                        continue;
                    }
                    for (c = 1; c < 10; c++)
                    {
                        if (c == a || c == b)  //c与a,b都不能重复
                        {
                            continue;
                        }
                        for (d = 1; d < 10; d++)
                        {
                            if (d == a || d == b || d == c)              //d与a,b,不能重复
                            {
                                continue;
                            }
                            for (e = 1; e < 10; e++)
                            {
                                if (e == a || e == b || e == c || e == d)       //e与a,b,c,d不能重复
                                {
                                    continue;
                                }
                                abcd = (a * 1000 + b * 100 + c * 10 + d);           //求出这个四位数
                                fghi = abcd * e;                                              //按条件求出fghi
                                if (fghi.ToString().Contains(a.ToString()) || fghi.ToString().Contains(b.ToString()) || fghi.ToString().Contains(c.ToString()) || 
  fghi.ToString().Contains(d.ToString()) || fghi.ToString().Contains(e.ToString()) || fghi.ToString().Contains("0") || fghi.ToString().Length > 4)
                                {
                   //判断这个fghi四否是四位数,并且里面的千,百,十,个位数中是否含有a,b,c,d,e,0               
                                }
                                else
                                {
                                    f = fghi / 1000;
                                    g = (fghi % 1000) / 100;
                                    h = ((fghi % 1000) % 100) / 10;
                                    i = ((fghi % 1000) % 100) % 10;
               //在符合的fghi结果中再次通过 f,g,h,i各不相同进行最后一次筛选
                                    if (f != g && f != h && f != i && g != h && g != i && h != i)
                //输出得到的结果
                                        Console.WriteLine("abcd *e = fghi 值为:{0}*{1}={2}", abcd.ToString(), e.ToString(), fghi.ToString());
                                }
                            }
                        }
                    }
                }

            Console.ReadKey();
        }

输出结果:

算完这个后让我想到一个数学题

 a          

     b

    c

    d

    e

     f

     g

     h

      i

这个刚好也是9个变量 要求所有横或者竖或者斜相加等于一个长数,这个是有技巧的,不过我忘了,所以有时都是试出来的,刚好上面已经定义了9个变量,我就想着和上面同样的方法 来球下面这个题       

static void  Main(string[] args)        
{   
  int a, b, c, d, e, f, g, h, i;
//这里和上面一题的思路基本都是一致的,在每个数取值都是从1至9,每个数不同的原则
 for (a = 1; a < 10; a++)
            {
                for (b = 1; b < 10; b++)
                {
                    if (b == a)
                    {
                        continue;
                    }
                    for (c = 1; c < 10; c++)
                    {
                        if (c == a || c == b)
                        {
                            continue;
                        }
                        for (d = 1; d < 10; d++)
                        {
                            if (d == a || d == b || d == c)
                            {
                                continue;
                            }
                            for (e = 1; e < 10; e++)
                            {
                                if (e == a || e == b || e == c || e == d)
                                {
                                    continue;
                                }
                                for (f = 1; f < 10; f++)
                                {
                                    if (f == a || f == b || f == c || f == d || f == e)
                                    {
                                        continue;
                                    }
                                    for (g = 1; g < 10; g++)
                                    {
                                        if (g == a || g == b || g == c || g == d || g == e || g == f)
                                        {
                                            continue;
                                        }
                                        for (h = 1; h < 10; h++)
                                        {
                                            if (h == a || h == b || h == c || h == d || h == e || h == f || h == g)
                                            {
                                                continue;
                                            }
                                            for (i = 1; i < 10; i++)
                                            {
                                                if (i == a || i == b || i == c || i == d || i == e || i == f || i == g || i == h)
                                                {
                                                    continue;
                                                }
                                                else
                                                {
//这里是条件的筛选,(b+c)==(e+i)实际是(a+b+c)==(a+e+i),为了简便点把a消掉了
//由于a~i有9个数,横竖斜共有8个,如果一次性比较if里会比较多,所以我就分两两为
//一组,4---2----1 最后得出结果
                                                    if ((b + c) == (d + g) && (a + i) == (d + f) && (g + i) == (b + e) && (f + i) == (e + g))    
                                                    {
                                                        if ((b + c) == (e + i) && (g + h) == (c + f))
                                                        {
                                                            if ((a + b + c) == (g + h + i))
                                                            {
                                                                Console.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8}", a.ToString(), b.ToString(), c.ToString(), d.ToString(), e.ToString(), f.ToString(), g.ToString(), h.ToString(), i.ToString());
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }

                            }
                        }
                    }
                }
            }

            Console.ReadKey();
}

最后结果:

总结:

  经过这两题发现原来的很多难题用程序会变的简单,虽然要写一些代码,在这些代码中只需知道所求问题的变量和条件,就可以了,虽然没遇到过实际问题,但一切问题应该都可以提取一些变量,这些变量再加上条件,再用上程序就会节省很所时间。。。

PS:我的代码写的比较烂。。。

做个推广:手赚联盟http://shouzhuan.org

posted on 2010-11-29 20:33  VanJames2010  阅读(206)  评论(0)    收藏  举报