食物分配问题

  今天上午上了一天的课,中文回来把昨晚一个学姐给的问题解决了,不应该叫解决,叫有了点思路,因为不知道为什么程序一直重复输出,下午7,8节课又去上了汇编实验,感觉就是和数字电路电路没什么去了了(又是搞硬件),晚上,花了1个半小时,把该问题实实在在的解决了。

  问题如下:

        //一堆食物,第一个人先拿走一个,在拿走剩下的九分之一,第二个先拿走两个,再拿走剩下的九分之一
        //如此重复下去,直到最后一人拿走剩下的。

  代码如下:

        

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 //一堆食物,第一个人先拿走一个,在拿走剩下的九分之一,第二个先拿走两个,再拿走剩下的九分之一
  7 //如此重复下去,直到最后一人拿走剩下的。
  8 namespace 分食物
  9 {
 10     class Program
 11     {
 12         static void Main(string[] args)
 13         {
 14 
 15             //int f=10, p;//f为食物数量,p为人数
 16             //while (true)
 17             //{
 18             //    int m = f;//临时保存食物数量
 19             //    while (true)
 20             //    {
 21             //        p = 1;//每次从第一个人开始
 22 
 23             //    loop:
 24             //        if ((f - p) % 9 == 0)//如果这堆食物减去第p人能被9整除,说明可以被后面的人继续拿走
 25             //        {
 26             //            if (f - p == 0)//判断剩下的食物是否和第p人相等
 27             //            {
 28             //                Console.WriteLine("人数:{0},食物:{1}", p, m);//
 29             //                Console.ReadKey();
 30             //                return;
 31             //            }
 32             //            f = f - p - (f - p) / 9;//取走食物后剩下的食物数量
 33             //            p++;
 34             //            goto loop;
 35             //        }
 36             //        f = m;//恢复原来食物的数量
 37             //        break;//退出人数循环
 38             //    }
 39             //    f++;//食物递增1;
 40             //}
 41 
 42 
 43             //int f, p;
 44             ////bool b = true;
 45             ////while (b)
 46             ////{
 47             //for (f = 10; ;++f)
 48             //{
 49             //    int temp = f;
 50             //    p = 1;
 51 
 52 
 53 
 54             //    loop:
 55             //        if ((f - p) % 9 == 0)
 56             //        {
 57             //            if (f - p == 0)
 58             //            {
 59             //                 Console.WriteLine("人数:{0},食物:{1}", p, temp);
 60             //                 Console.ReadKey();
 61             //                return;
 62             //             }
 63             //        f = f - p - (f - p) / 9;
 64             //            p++;
 65             //            goto loop;
 66             //        }
 67             //    f = temp;
 68 
 69            for(int f=10; ; f++)
 70             {
 71                 step(f, 1);
 72             }
 73            
 74             //    //}
 75             //}
 76 
 77 
 78         }
 79         public static void step(int f,int p)
 80         {
 81            
 82 
 83             if ((f - p) % 9 == 0)
 84             {
 85                 if (f - p == 0)
 86                 {
 87                     for (int i = p - 1; i > 0; i--)
 88                     {
 89                         f = f * 9 / 8 + i;
 90                     }
 91                     Console.WriteLine("食物:{0},人数:{1}", f, p);
 92                     Console.ReadKey();
 93                     return;
 94                 }
 95                 f = f - p - (f - p) / 9;
 96                 p++;
 97                  step(f, p);
 98             }
 99             return;  
100            
101             
102            
103             
104         }
105     }
106 }

  我最先用的是递归,由于出现了一直重复输出的情况,后来又用for循环,不知怎么得,有出现一个代码无法访问的问题,最后用的while循环。虽然此问题不难,但还是花了我一些时间来完成此任务,最后我三种方法都实现了。

                                                                       2015-11-26

posted @ 2015-11-26 22:25  cy-97  阅读(260)  评论(0编辑  收藏  举报