注册 登录
编程论坛 数据结构与算法

刚刚学编程的小菜鸟 请教大大们一个约瑟夫环程序 不太会

cxazhr 发布于 2012-10-11 22:48, 1056 次点击
1、问题描述:约瑟夫(joseph)问题的一种描述是:编号为1、2、…、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m。从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列。将他的密码作为新的m的值,从他在顺时针方向上方的下一个人开始重新报数,如此下去,直至所有人全部出列为止。式设计一个程序求出出列顺序。
#include <stdio.h>
#include <stdlib.h>

typedef struct Lnode{
    int data;
    int num;
    struct Lnode *next;
}*linklist;

void initlist(linklist &L,int a[],int n)
{
    linklist s,r;int i;
    L=(linklist)malloc(sizeof(linklist));
    L->next=NULL;
    r=L;
    for(i=0;i<n;i++)
    {
    s=(linklist)malloc(sizeof(linklist));
    s->data=a[i];
    s->num=i+1;
    r->next=s;
    r=s;
    }
r->next=L;
}

int delete_and_get(linklist L,int x,int &e)
{
    int i=0;int j;
    linklist p=L->next,q;
    while(p->next!=NULL && i<x-1)
    {
        p=p->next;
        i++;
    }
    if(!(p->next)||i>x-1)
    return -1;
    q=p->next;
    p->next=q->next;
    e=q->data;j=q->num;
    free(q);
    printf("被读出来的人是%d",j);
    return e;     
}

 int main()
{
     int i,m,n;int a[100];
     linklist L;
     printf("请输入人数和每个人的密码");
     scanf("%d %d/n",&m,&n);
     for(i=0;i<n;i++)
         {
         scanf("%d ",&a[i]);
         }     
  delete_and_get(initlist(*L, a, n),m);
  return 0;
}
能不能帮帮忙 快哭了—----
12 回复
#2
cxazhr2012-10-11 22:50
别沉了
#3
cxazhr2012-10-11 22:50
求帮忙
#4
寒风中的细雨2012-10-11 22:56
什么问题有?
#5
寒风中的细雨2012-10-11 22:57
回复 4楼 寒风中的细雨
问题最好是描述下  这样你也可以进一步的分析  也可以节省点别人的时间
#6
cxazhr2012-10-11 23:21
回复 5楼 寒风中的细雨
问题一 对于数据结构中这些指针的问题 什么LNODE *p ,linklist p,linklist *p,还有**p什么的 搞不懂 书上也没有 网上也搜不到具体的说明
这个程序C FREE 编译的错误是
[Error] C:\Users\a\Documents\C-Free\Temp\未命名25.cpp:56: error: invalid initialization of reference of type 'Lnode*&' from expression of type 'Lnode'[Error] C:\Users\a\Documents\C-Free\Temp\未命名25.cpp:11: error: in passing argument 1 of `void initlist(Lnode*&, int*, int)' 我自己也有点糊涂 不知道到底对不对 希望高人帮忙改改 能给编译过了
#7
cxazhr2012-10-11 23:23
谢谢了
#8
寒风中的细雨2012-10-11 23:33
引用‘&’  是c++的

首先你确定下 源文件的类型 .c  or .cpp格式的  确保是.cpp的
#9
寒风中的细雨2012-10-11 23:34
基本的语法 只有自己看书  多练了   
#10
cxazhr2012-10-11 23:36
回复 8楼 寒风中的细雨
是CPP的 大大先睡吧 有点晚了 身体要紧~~
#11
cxazhr2012-10-11 23:37
回复 9楼 寒风中的细雨
那么这个程序 能帮忙看看嘛 让他AC掉
#12
寒风中的细雨2012-10-12 08:49
delete_and_get(initlist(*L, a, n),m);//参数   因为在声明中没有默认参数  so传递的参数个数是不正确的

initlist(*L, a, n)//参数    *L类型传递错误
---------------------------------------------------------------------------------------------------

目前你大概还不熟悉,  多练练就会好很多
#13
狼牙002012-10-12 09:47
这算菜鸟的题目吗?指针我表示很有鸭梨
1