| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1015 人关注过本帖
标题:约瑟夫问题
只看楼主 加入收藏
chao41091153
Rank: 2
等 级:论坛游民
帖 子:39
专家分:33
注 册:2010-5-26
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:10 
约瑟夫问题
N个人围成一圈,从第一个开始报数,第M个将出列,最后剩下一个,其余人都将已出列。问出列的顺序?例如N=6,M=5,出列的序号为5,4,6,2,3。最后剩下1号。
(数组)

[ 本帖最后由 chao41091153 于 2010-5-30 16:10 编辑 ]
搜索更多相关主题的帖子: 约瑟夫 个人 
2010-05-30 14:58
Alen0128
Rank: 4
等 级:业余侠客
帖 子:171
专家分:222
注 册:2009-12-26
收藏
得分:0 
链表行吗?

-不想让你发现我 凌乱的脚步 ,我努力 跟上你的速度
2010-05-30 15:10
chao41091153
Rank: 2
等 级:论坛游民
帖 子:39
专家分:33
注 册:2010-5-26
收藏
得分:0 
回复 2楼 Alen0128
作业  用数组

[ 本帖最后由 chao41091153 于 2010-5-30 16:10 编辑 ]
2010-05-30 15:11
凉小凉
Rank: 2
等 级:论坛游民
帖 子:55
专家分:33
注 册:2010-5-30
收藏
得分:3 
#include <stdio.h>
main()
{
    int a[10],i,n,m;
    scanf("%d",&n);
    for(i=n;i>0;i--)
    {
        a[i]=i;
    }
    scanf("%d",&m);
    for(i=1;i<=10;i++)
    {
        if(a[i]==m)   
           printf("%d",m);
    }
    for(i=1;i<=10;i++)
    {
        
    getch();
}
2010-05-30 16:59
tdy1006
Rank: 4
等 级:业余侠客
帖 子:173
专家分:240
注 册:2009-5-13
收藏
得分:0 
程序代码:
int Josephus1(int n,int s,int m,int *B){
    int i,k,tmp,j;
    if(m<0||s<1||n<0)
        return 0;
    else{
        //向量B初始化
            for(i=0;i<n;i++)
                B[i]=i+1;
        //算法
            i=s-1;
            for(k=n;k>1;k--)
            {
                i=(i+m-1)%k;
                if(i!=k-1)
                {
                    tmp=B[i];
                    for(j=i;j<k-1;j++)
                        B[j]=B[j+1];
                    B[k-1]=tmp;
                }
            }
       
            for(k=0;k<n/2;k++)
            {
                tmp=B[k];
                B[k]=B[n-k-1];
                B[n-k-1]=tmp;
            }
        }   
return 1;
}



程序代码:
#include "malloc.h"
#define null 0
typedef struct node {
    int data;
    struct node *next;} JD;

void creater(JD *head,int n)
{
    int i;
    JD *L,*s,*p;
    L=(struct node *)malloc(sizeof(struct node));
    L->next=null;
    s=L;
    for(i=1;i<=n;i++)
    {
        p=(JD *)malloc(sizeof(JD));
        p->data=i;
        s->next=p;
        s=p;
    }
    head->next=p;
    p->next=L->next;
}

int delet(JD *t)
{
    JD *q;int e;
    q=t->next;
    t->next=q->next;
    e=q->data;
    free(q);
    return e;
}
int Josephus2(int n,int s,int m,int *B)
{    if(m<0||s<1||n<0)
        return 0;
    JD *head;
    static JD *t;
    head=(struct node *)malloc(sizeof(struct node));
    head->next=null;
    int j=0,i,k;
    creater(head,n);
    t=head;
    for(i=0;i<s;i++)
        t=t->next;
    while(t!=t->next)
    {
        if(m!=1)
        {
            for(k=1;k<m;k++)
                t=t->next;
        }
        B[j++]=delet(t);
    }
    B[j]=t->data;
    return 1;
}


[ 本帖最后由 tdy1006 于 2010-5-30 18:31 编辑 ]
2010-05-30 18:30
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 2楼 Alen0128
链表是首推的解决方法, 你也可以用数组来仿链表,/
几行代码就能解决的问题, 谭浩强却给出了几十行的代码,让人情不自禁的惊叹他的代码能力之强

我就是真命天子,顺我者生,逆我者死!
2010-05-30 19:00
Alen0128
Rank: 4
等 级:业余侠客
帖 子:171
专家分:222
注 册:2009-12-26
收藏
得分:0 
回复 6楼 BlueGuy
嘿嘿

-不想让你发现我 凌乱的脚步 ,我努力 跟上你的速度
2010-05-31 12:22
Alen0128
Rank: 4
等 级:业余侠客
帖 子:171
专家分:222
注 册:2009-12-26
收藏
得分:0 
回复 6楼 BlueGuy
版主老大,你用的什么写的?代码发出来看看,学习学习。

-不想让你发现我 凌乱的脚步 ,我努力 跟上你的速度
2010-05-31 12:24
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int N = 5;
int M = 9;

typedef struct node* link;
struct node
{
    int item;
    link next;
};

int main(void)
{
    int i;
    link t = malloc(sizeof(*t)), x = t;
    t->item = 1; t->next = t;
    for (i = 2; i <= N; i++)
    {
        x = (x->next = malloc(sizeof*x));
        x->item = i; x->next = t;
    }
   
    while (x != x->next)
    {
        for(i = 1; i < M; i++)
          x->next = x->next->next;
         N--;
    }
   
     printf("%d\n", x->item);
    
     return 0;
}


[ 本帖最后由 BlueGuy 于 2010-7-24 18:23 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-05-31 12:48
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 8楼 Alen0128
c 算法上面的源码, 未经优化的代码

这个问题我曾经深入学习过, 写了6种不同的解法, 只是代码放在了已经退休的机器里,
现在没心思深究这个问题了

总之, 这个题就是为循环链表设计的,/

我就是真命天子,顺我者生,逆我者死!
2010-05-31 12:52
快速回复:约瑟夫问题
数据加载中...
 
   



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

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