渣渣写算法之丢手帕问题
2021-05-04 07:27
标签:细节 输出 data vat com 简单的 main isp class 约瑟夫问题(丢手帕) 下面是尝试的一些Demo写法,先不要在意代码上的细节 ① 利用数组,还是这个块,因为数据结构简单 ②利用List,没有数组快 ③ 环形链表,慢 简单测试 所以优先使用简单的结构解决问题 渣渣写算法之丢手帕问题 标签:细节 输出 data vat com 简单的 main isp class 原文地址:https://www.cnblogs.com/wwkk/p/13196326.html 1 public static void ThreeOut(int num, int outnum)
2 {
3 int[] data = new int[num];
4 for (int i = 0; i )
5 {
6 data[i]=i + 1;
7 }
8 int index = 0;
9 int count = 0;
10 for (int i = 0; ; i++)
11 {
12 if (index >= data.Length)
13 {
14 index = 0;
15 }
16
17 if (data[index] == 0)
18 {
19 i--;
20 index++;
21 continue;
22 }
23 if ((i + 1) % outnum == 0)
24 {
25 // Console.WriteLine(data[index]); 输出每一个
26 if (count >= data.Length - 1)
27 {
28 Console.WriteLine($"最后一个{ data[index]}"); //输出最后一个
29 break;
30 }
31 count++;
32 data[index] = 0;
33 }
34 index++;
35 }
36 }
1 public static void Second(int num,int outnum)
2 {
3 Listint> data = new Listint>();
4 for (int i = 0; i )
5 {
6 data.Add(i+1);
7 }
8 int index = 0;
9 for (int i = 0;; i++)
10 {
11 if (index>= data.Count)
12 {
13 index = 0;
14 }
15 if (data.Count==1)
16 {
17 Console.WriteLine($"最后一个{data[0]}"); //输出最后一个
18 break;
19 }
20
21 if ((i + 1) % outnum == 0)
22 {
23 // Console.WriteLine(data[index]); //输出每一个
24 data.Remove(data[index]);
25 }
26 else {
27 index++;
28 }
29 }
30 }
1 private static void FirstOut(List
1 private static List
1 static void Main(string[] args)
2 {
3 int num = 50000;
4 int outnum = 72;
5 Stopwatch st = new Stopwatch();
6 st.Start();
7 Two.Second(num, outnum);
8
9 st.Stop();
10 Console.WriteLine($"List耗时:{st.ElapsedMilliseconds}");
11 st.Reset();
12 st.Start();
13 Three.ThreeOut(num, outnum);
14 st.Stop();
15 Console.WriteLine($"数组耗时:{st.ElapsedMilliseconds}");
16 st.Reset();
17 List