2: 话说有四个女人越狱,都很有姿色,把一个看门狱警骗上床,然后穿着睡衣逃跑,跑到一条河边,有一座桥,夜间有一火把,每次最多过两个,必需带火把,过桥速度不一样 
no.1 1min 
no.2 2min 
no3 5min 
no.4 10min 
两个人过用最慢一个的速度,火把不能扔 
如何在17min内四个女人都过桥 之前的题目不够吸引人?都没有人看,我试试有女人的标题有多少人看.

解决方案 »

  1.   

    1、NO1 + NO2 过
    2、NO1 回
    3、NO3、NO4过
    4、NO2回
    5、NO1、NO2过
      

  2.   

    题目是老,但做法各不相同:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace WomenBridge
    {
        class Program
        {
            static void Main(string[] args)
            {
                //List<Woman> left = new List<Woman>() { new Woman(1, 1), new Woman(2, 2), new Woman(3, 5), new Woman(4, 10) };
                List<Woman> left = new List<Woman>() { new Woman(1, 1), new Woman(2, 2), new Woman(3, 5), new Woman(4, 10),
                    new Woman(5,3),new Woman (6,8),new Woman(7,15),new Woman(8,20) };
                FuckingBridge fb=new FuckingBridge ();
                fb.Compute(left);
                Console.ReadLine();
            }
            
            
            #region Woman
            public class FuckingBridge
            {
                public void Compute(List<Woman> left)
                {
                    left.Sort();
                    List<Woman> right = new List<Woman>();                if (left.Count <= 0)
                    {
                        Console.WriteLine("没有人要过河!");
                    }
                    else if (left.Count == 1)
                    {
                        Console.WriteLine("{0}自己过河,耗时{1}", left[0].Id, left[0].CrossTime);
                    }
                    else
                    {
                        int sum = 0;                    while (left.Count > 0)
                        {
                            sum += firstClassStep(left, right);
                            sum += SecondClassStep(left, right);
                        }
                        Console.WriteLine("总耗时:" + sum);
                    }
                }
                private int firstClassStep(List<Woman> left, List<Woman> right)
                {
                    int time = 0;
                    if (left.Count > 0)
                    {
                        Woman w0 = left[0];
                        Woman w1 = left[1];                    if (left.Count == 2)
                        {
                            //过去就不用回来.
                            right.Insert(0, w0);
                            right.Insert(1, w1);
                            left.Clear();
                            time = w1.CrossTime;
                            Console.WriteLine("{0}和{1}一起过河,无返回.耗时:{2}", w0, w1, time);
                        }
                        else
                        {
                            //只有w1过去而已.
                            right.Insert(0, w1);
                            left.RemoveAt(1);
                            time = w0.CrossTime + w1.CrossTime;
                            Console.WriteLine("{0}和{1}一起过河,{0}返回.耗时:{2}", w0, w1, time);
                        }
                    }
                    return time;
                }
                private int SecondClassStep(List<Woman> left, List<Woman> right)
                {
                    int time = 0;
                    int size = left.Count;
                    if (size > 0)
                    {
                        Woman w0 = left[size - 2];
                        Woman w1 = left[size - 1];
                        left.RemoveAt(size - 1);
                        left.RemoveAt(size - 2);
                        right.Insert(1, w0);
                        right.Insert(2, w1);
                        if (left.Count == 0)
                        {
                            time = w1.CrossTime;
                            Console.WriteLine("{0}和{1}一起过河,无返回.耗时:{2}", w0, w1, time);
                        }
                        else
                        {
                            Woman w2 = right[0];
                            right.RemoveAt(0);
                            left.Insert(1, w2);
                            time = w1.CrossTime + w2.CrossTime;
                            Console.WriteLine("{0}和{1}一起过河,{2}返回.耗时:{3}", w0, w1, w2, time);
                        }
                    }
                    return time;
                }
            }
            public class Woman : IComparable<Woman>
            {
                public Woman(int id, int time)
                {
                    this.Id = id;
                    this.CrossTime = time;
                }
                public int Id { get; set; }
                public int CrossTime { get; set; }
                public override string ToString()
                {
                    return string.Format("(Id:{0},Time:{1})", Id.ToString().PadLeft(3, ' '), CrossTime.ToString().PadLeft(4, ' '));
                }
                #region IComparable<Woman> Members            public int CompareTo(Woman other)
                {
                    if (other == null) return 1;
                    if (this.CrossTime > other.CrossTime) return 1;
                    if (this.CrossTime < other.CrossTime) return -1;
                    return 0;
                }            #endregion
            }
            #endregion
        }
    }
      

  3.   

    过法如下:
    第一个来回:
      1:no.1和no.2 过桥,no.2留下。 耗时为:2秒
      2:no.1把火把带回来,耗时为:1秒
    第二个来回:
      1:no.3和no.4过桥,no.3和no.4都留下来。耗时为:10秒
      2:no.2把火把带回来,耗时为:2秒
    第三个来回:
      1:no.1和no.2 过桥。 耗时为:2秒
     经过三次全部都过桥了。总共耗时:2+1+10+2+2=17.
    明白了吗?
      

  4.   

    d[0]+d[1]+d[2]+...d[1000]-1-2-3-...-1000 =?
      

  5.   

    static void Main(string[] args)
     2        {
     3            int[] list = new int[1001];
     4
     5            for (int i = 1; i < 1001; i++)
     6            {
     7                list[i - 1] = i;
     8            }
     9
    10            Random random = new Random();
    11
    12            list[1000] = random.Next(1, 1000);
    13
    14            int sum1 = 0;
    15
    16            int sum2 = 0;
    17
    18            foreach (int i in list)
    19            {
    20
    21                sum1 = sum1 + i;
    22            }
    23            for (int i = 1; i < 1001; i++)
    24            {
    25
    26                sum2 = sum2 + i;
    27            }
    28
    29
    30            Console.WriteLine("重复的数字是:"+(sum1 - sum2).ToString());
    31            Console.Read();
    32        }