小弟数学不好。。。肿么办?

hellNo 2013-03-25 05:45:34
孤岛上的N(16<N<32)个人一致通过以下方式减少生存人数:坐成一圈(位置记为0到N-1)并从第一个人开始报数,报到M(2<M<10)的人会被杀死,直到最后一个。为了生存下去,某人拿出了您设计好的这段程序,基于N和M两个参数计算出了最终存活的位置。
求大哥们帮个忙。。。。不帮就甭骂了。。我也是实在没办法才脸皮厚的这样,当初数学课不怎么上我错了。。
...全文
245 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
马兆娟 2013-03-27
  • 打赏
  • 举报
回复
励志 数学家...
threenewbee 2013-03-26
  • 打赏
  • 举报
回复
google 约瑟夫环。
种草德鲁伊 2013-03-26
  • 打赏
  • 举报
回复
我数学也不好,打算把小学数学的书翻出来重新学习学习
keith_cheung 2013-03-25
  • 打赏
  • 举报
回复
啊,原来楼主是在找死啊!!!
h_gxi 2013-03-25
  • 打赏
  • 举报
回复

private void button2_Click(object sender, EventArgs e)
        {
            int n = 20;  //N(16<N<32)
            int m = 5;  //M(2<M<10)
            string s = "";
            for (int i = 0; i < n; i++)
            {
                s += i.ToString() + ",";
            }
            string str = getCount2(s, m, n, n);
            MessageBox.Show(str);
        }

        private string getCount2(string s, int m, int n, int len)  //杀掉1个后下一个重新开始报数
        {
            if (16 < n && n < 32 && 2 < m && m < 10)
            {
            }
            else
            {
                return "N(16<N<32),M(2<M<10)";
            }
            bool bl = false;
            string ss = "";
            string s1 = "";
            string s2 = "";
            textBox1.Text += s + "\r\n";  //枪毙过程
            string[] list = s.Split(',');
            for (int i = 0; i < len; i++)
            {
                if (len < m)
                {
                    if (i + 1 == m % len)
                    {
                        bl = true;
                        continue;
                    }
                }
                if (i + 1 == m)
                {
                    bl = true;
                    continue;
                }
                if (bl)
                {
                    s1 += list[i] + ",";
                }
                else
                {
                    s2 += list[i] + ",";
                }
            }
            bl = false;
            ss = s1 + s2;
            if (len > 1)
            {
                ss = getCount2(ss, m, n, len - 1);
                return ss;
            }
            ss = ss.Remove(ss.LastIndexOf(","), 1);
            return ss;
        }
枪毙过程打印: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0,1,2,3, 10,11,12,13,14,15,16,17,18,19,0,1,2,3,5,6,7,8, 15,16,17,18,19,0,1,2,3,5,6,7,8,10,11,12,13, 0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18, 6,7,8,10,11,12,13,15,16,17,18,0,1,2,3, 12,13,15,16,17,18,0,1,2,3,6,7,8,10, 18,0,1,2,3,6,7,8,10,12,13,15,16, 6,7,8,10,12,13,15,16,18,0,1,2, 13,15,16,18,0,1,2,6,7,8,10, 1,2,6,7,8,10,13,15,16,18, 10,13,15,16,18,1,2,6,7, 1,2,6,7,10,13,15,16, 13,15,16,1,2,6,7, 6,7,13,15,16,1, 1,6,7,13,15, 1,6,7,13, 6,7,13, 13,6, 6,
q107770540 2013-03-25
  • 打赏
  • 举报
回复
从算法角度来看, 这其实就是一个递归
bdmh 2013-03-25
  • 打赏
  • 举报
回复
网上查吧,各种算法说明都很明白了,看看约瑟夫算法

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧