1、用穷举法求2-500之间所有亲密数对。所谓亲密数对,指的是如果M的因子(包括1,不包括本身)之和为N,N的因子之和为M,则M和N称作亲密数对。
2、货郎担问题:某售货员要到若干个城市销售货物,已知各城市之间的距离,需求售货员选择出发的城市以及旅行路线,使每个城市只经过一次,最后回到原出发城市,而总路程最短。(提示:用哈米尔顿算法)  请各位帮忙最好有源码C# 编程

解决方案 »

  1.   

    问题2是 TSP(Traveling Saleman Problem)问题,是NP-Hard问题,在 点(城市)数量不大的时候,最优,最简单解就是穷举法.(穷举法,时间复杂度,空间复杂度都是最高的,但是处理逻辑简单)因为TSP是NP-Hard问题,所以不存在一个可以在多项式时间内可以验证,取解的算法.问题一,暂时还没去想.
      

  2.   

    using System;class Program
    {
      static void Main()
      {
        for (int i = 2; i <= 500; i++)
        {
          int j = FacSum(i);
          if (i == FacSum(j))
            Console.WriteLine("{0} 和 {1} 是亲密数对。", i, j);
        }
      }
      
      static int FacSum(int x)
      {
        int sum = 1;
        for (int i = 2; i <= x / 2; i++)
          if (x % i == 0) sum += i;
        return sum;
      }
    }
      

  3.   


    static void Main()
      {
        int m = 0;
        for (int i = 2; i <= 500; i++)
        {
          for(int j = 2;j<= 500;j++)
           {
              m = FacSum(i);
              if (m == FacSum(j))
              Console.WriteLine("{0} 和 {1} 是亲密数对。", i, j);
            }    }
      }
      

  4.   

    第一题:这个意思???            List<int> lint = new List<int>();
                for (int i = 2; i <= 500; i++)
                {
                    int n = 0;
                    for (int j = 1; j < i; j++)
                    {
                        if (i % j == 0)
                        {
                            n += j;
                        }
                    }
                    int m = 0;
                    for (int j = 1; j < n; j++)
                    {
                        if (n % j == 0)
                        {
                            m += j;
                        }
                    }
                    if (n == m)
                    {
                        lint.Add(i);
                    }
                }