约瑟夫环,求帮忙看程序错在哪里

2014-09-09 21:07:26 +08:00
 spencerqiu
我的思路是:
1.设定一个布尔数组,所有值赋为真
2.设定三个累加器 s、j、b ,s 用来报数,j用来循环、联系头和尾,b用来统计圈内剩余人数
3.出圈的赋为假,输出圈中为真的元素。

代码如下,是按照思路写的,但是有问题,不曾能找的出来。

#include<iostream>
#include<cstdlib>
using namespace std;
int a[100];
int main()
{
int m,n;
cin >>m>>n;
int b;
int s=1;
int i;
int j=1;
b=m;
for(i=1;i<=m;i++)
a[i]=1;
do {
if (a[j]==1)
s++;
if (s==n)
{
a[i]=0;
s=1;
b--;
}
j++;
if (j=n+1)
j=1;
}while(b==1);
for (i=1;i<=m;i++)
if (a[i]==1)
{
cout <<i;
break;
}
system("pause");
return 0;
}
1958 次点击
所在节点    问与答
6 条回复
sophymax
2014-09-09 21:17:27 +08:00
占前排,坐等楼主被喷
paulw54jrn
2014-09-09 21:20:30 +08:00
好歹发个gist..
Cee
2014-09-09 21:24:19 +08:00
代碼好亂
中間a[i]=0; 和i有啥關係?
而且判斷時候你的s已經做了s++了,也是要找到下一個人啊
Cee
2014-09-09 21:27:10 +08:00
做算法題目前先整理一下思路。
msg7086
2014-09-10 03:09:04 +08:00
首先,你需要把变量的名字弄正常;
msg7086
2014-09-10 03:26:56 +08:00
随手打了一个链表数组版,轻喷。

https://gist.github.com/msg7086/03a1eafe4c13566236bc

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/132538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX