读书人

小弟数学糟糕。肿么办

发布时间: 2013-03-27 11:22:42 作者: rapoo

小弟数学不好。。。肿么办?
孤岛上的N(16<N<32)个人一致通过以下方式减少生存人数:坐成一圈(位置记为0到N-1)并从第一个人开始报数,报到M(2<M<10)的人会被杀死,直到最后一个。为了生存下去,某人拿出了您设计好的这段程序,基于N和M两个参数计算出了最终存活的位置。
求大哥们帮个忙。。。。不帮就甭骂了。。我也是实在没办法才脸皮厚的这样,当初数学课不怎么上我错了。。
[解决办法]


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,

读书人网 >C#

热点推荐