论坛: 编程破解 标题: 老大们!求救阿! 复制本贴地址    
作者: bluepluto [mmgg00]    论坛用户   登录
小弟我初学数据结构,现在想编一个程序:请帮忙
  约瑟夫环:编号为1,2,....,n的n 个人按顺时针方向围坐在一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值
m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将它的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。
就是这个了,希望帮我看看,给我算法或程序,先谢了

dujiang1982@yahoo.com.cn


地主 发表时间: 11/02 11:11

回复: kikiny [kikiny]   论坛用户   登录
用哪种编程语言?

B1层 发表时间: 11/03 19:39

回复: cimsxiyang [cimsxiyang]   版主   登录
/*下面这个程序是c++的,不知道是哪位前辈写的,我只是从刚好网上见到,就cp给你了*/

代码:

#include <iostream.h>
#include <fstream.h>
void main()
{
    int n,cs,s=0,i,j;//n:人数;cs:密码;s第几个人出列;i,j:循环用变量
    ifstream input("myindata.txt");
input>>n>>cs>>s;
cout<<"人数:"<<n<<" 初始密码"<<cs<<" 初始是第几个人:"<<s<<endl;
int* sz=new int[n+1];
int* sz1=new int[n+1];
for(i=1;i<=n;i++)
{
    input>>sz[i];
sz1[i]=i;
    cout<<sz[i]<<" ";
}
cout<<endl;
for(i=n;i>=1;i--)
{
    s=(s+cs-1)%i;
if(s==0) s=i;
cs=sz[s];
cout<<"第"<<sz1[s]<<"个人出列"<<"密码是:"<<cs<<endl;
        for(j=s;j<i;j++)
{
        sz[j]=sz[j+1];
sz1[j]=sz1[j+1];
}
}
    delete sz;
cin>>i; 




B2层 发表时间: 11/03 20:21

回复: bluepluto [mmgg00]   论坛用户   登录
最好是用c语言,不过c++也行

B3层 发表时间: 11/04 19:36

回复: bluepluto [mmgg00]   论坛用户   登录
夕阳,谢谢了
你真的很厉害
谢了

B4层 发表时间: 11/04 19:38

回复: bluepluto [mmgg00]   论坛用户   登录
夕阳
上面的代码好像还不完全吧
是吗


B5层 发表时间: 11/04 20:06

回复: syshunter [syshunter]   版主   登录
大体算法已经出来了,自己可以用C照抄了。

B6层 发表时间: 11/04 20:55

回复: bluepluto [mmgg00]   论坛用户   登录
谢谢了

B7层 发表时间: 11/09 19:20

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号