| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5362 人关注过本帖
标题:求用顺序表编写约瑟夫环问题
只看楼主 加入收藏
holyhsw
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2011-6-12
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:5 
求用顺序表编写约瑟夫环问题
约瑟夫环(Joseph)问题的一种描述是:编号为1、2、3……n的n个人按照顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按照顺时针的方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。  
[基本要求]
  利用顺序表存储结构模拟此过程,按照出列的顺序依次输出每个人的编号。
搜索更多相关主题的帖子: 约瑟夫 所有人 顺时针 正整数 一个人 
2011-06-18 22:06
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:20 
#include<stdio.h>
#define MaxNum 100
typedef struct
{
    int data[MaxNum];
    int length;
}SqList;

int main()
{
    SqList L;
    int i,j,k=1,e,m;
    printf("请输入总人数n和初始值m:\n");
    scanf("%d%d",&L.length,&m);
    for(i=0;i<L.length;i++)
    L.data[i]=i+1;
    int a[L.length];
    printf("请输入密码:");
    for(i=0;i<L.length;i++)
    scanf("%d",&a[i]);
    printf("出队顺序为:");
    while(L.length!=0)
    {
        k--;
        i=(k+m-1)%(L.length);
        e=L.data[i];
        printf("%d\t",e);
        m=a[i];
        for(j=i;j<L.length-1;j++)
        {
           L.data[j]=L.data[j+1];
           a[j]=a[j+1];
        }
        L.length--;
        k=i+1;
    }
    printf("\n");
    return 0;
}
如人数6,m初始值2,密码2 3 4 5 6 7
则出队顺序2 5 1 4 6 3
2011-06-19 22:35
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:0 
额·····发现自己写的是c,从给你个c++的
#include<iostream>
#define MaxNum 100
using namespace std;
typedef struct
{
    int data[MaxNum];
    int length;
}SqList;

int main()
{
    SqList L;
    int i,j,k=1,e,m;
    cout<<"请输入总人数n和初始值m:"<<endl;
    cin>>L.length>>m;
    for(i=0;i<L.length;i++)
    L.data[i]=i+1;
    int a[L.length];
    cout<<"请输入密码:";
    for(i=0;i<L.length;i++)
    cin>>a[i];
    cout<<"出队顺序为:"<<endl;
    while(L.length!=0)
    {
        k--;
        i=(k+m-1)%(L.length);
        e=L.data[i];
        cout<<e<<'\t';
        m=a[i];
        for(j=i;j<L.length-1;j++)
        {
           L.data[j]=L.data[j+1];
           a[j]=a[j+1];
        }
        L.length--;
        k=i+1;
    }
    cout<<endl;
    return 0;
}
2011-06-20 16:55
holyhsw
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2011-6-12
收藏
得分:0 
回复 2楼 Toomj
这个程序我测试用不了了
2011-06-20 22:30
holyhsw
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2011-6-12
收藏
得分:0 
回复 2楼 Toomj
这个程序我测试用不了了
2011-06-20 22:30
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:0 
回复 5楼 holyhsw
你用的啥编译?我c-free行啊
2011-06-20 23:27
快速回复:求用顺序表编写约瑟夫环问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014990 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved