食物分配问题
今天上午上了一天的课,中文回来把昨晚一个学姐给的问题解决了,不应该叫解决,叫有了点思路,因为不知道为什么程序一直重复输出,下午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