首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

约瑟夫环,求改错,请注明出错位置和原因解决方案

2012-04-21 
约瑟夫环,求改错,请注明出错位置和原因C/C++ code#include stdio.h#include malloc.h#define LEN size

约瑟夫环,求改错,请注明出错位置和原因

C/C++ code
#include <stdio.h>#include <malloc.h>#define LEN sizeof(struct josephus)struct Josephus{    int num;    struct Josephus * point;};void main(){    struct josephus *head,*p1,*p2;    int n,m,i=1;    printf("输入人数!\n");    scanf("%d",&n);    p1=p2=(struct josephus *)malloc(LEN);    for(i=1;i<=n;i++)    {        if(i==1) head=p1;        else p2=p1;        p2->num=i;        p1=(struct josephus *)malloc(LEN);        p2->point=p1;        }    p2->point=head;    printf("输入退出号码!\n");    scanf("%d",&m);    p1=p2=head;    p1=p1->point;    while(p1!=p2)    {        i++;        p1=p1->point;        p2=p2->point;        if(i==m)        {            i=0;            p2=p1;        }    }printf("最后剩下的人为第 %d 个人",p1->num);}


[解决办法]
还有, 
struct Josephus
{
int num;
struct Josephus * point;
};
这里Josephus是大写的 J开头,之后都是 小写的josephus 。
改过来吧
[解决办法]
C/C++ code
#include<stdio.h>#include<stdlib.h>         typedef struct node{        int value;        struct node *next;    }NODE;NODE *createlink(int n){        NODE *head=NULL,*p=NULL,*q=NULL;        int i=1;        head=p=(struct node*)malloc(sizeof(struct node));        p->value=i;        for(i=2;i<=n;i++){            q=(struct node*)malloc(sizeof(struct node));            if(q==0) return 0;            p->next=q;            p=q;            p->value=i;         }        p->next=head;        return head;          }void jose(NODE *p,int n,int m){    int i,j,g=0;    NODE *q=NULL;    for(i=1;i<=n;i++){        for(j=1;j<m;j++){        p=p->next;}        q=p->next;        p->next=q->next;         if(g%5==0)                  {g++;printf("\n");}                 else g++;        printf("%3d:%3dout ",i,q->value-1);        free(q);    }    printf("\n");    p->next=NULL;}int main( ){    int m=0;    int n=0;        scanf("%d",&m);        scanf("%d",&n);        NODE *head=NULL;    head=createlink(n);    jose(head,n,m);    return 0;}
[解决办法]
while(p1!=p2)
{
i++;
p1=p1->point;
p2=p2->point;
if(i==m)
{
i=0;
p2=p1;
}
}
这样写while()循环好像只执行到第一次i==m时就结束了
i=2;
while(p1!=p2)
{
i++;
p1=p1->point;
p2=p2->point;
if(i==m)
{
t++;
printf("第%d个出局的为第 %d 个人\n",t,p1->num);
i=1;
p2->point=p1->point;
p1=p1->point;
}
}
printf("最后剩下的是第%d个人\n",p1->num);
这样写好像可以

热点排行
Bad Request.