| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 792 人关注过本帖
标题:约瑟夫环
只看楼主 加入收藏
C78486080
Rank: 2
等 级:论坛游民
帖 子:18
专家分:18
注 册:2009-12-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
约瑟夫环
本人编了一个简单的程序,程序目的:25个人围成一圈,从第一个人开始报数,数到3或者3的倍数着出列,求最后出列的序号。但是没有运行处结果。
程序如下:
#include <stdio.h>
#include <malloc.h>
struct tm
{
    int num;
    struct tm *next;
}*p,*q,*head;

void main()
{
    int i;
    head=NULL;
     //建立循环链表
    for(i=0;i<25;i++)
    {
        p=(struct tm *)malloc(sizeof(struct tm));
        p->num=i;
        if(head==NULL)
            head=p;
        else
            q->next=p;
        q=p;
    }
    p->next=head;
    q=head;
    依次删除应该出栈的元素
    while(p->next!=p)
    {
        for(i=0;i<2;i++)
        {
            p=q;
            p=p->next;
        }
        q->next=p->next;
        printf("%4d",p->num);
        free(p);
        p=q->next;
    }
    printf("The last number is %d",p->num);
}
希望各位楼主指点一下,帮我找出其中的错误,谢谢.
搜索更多相关主题的帖子: 约瑟夫 
2009-12-21 21:55
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:2 
图片附件: 游客没有浏览图片的权限,请 登录注册
输出的结果貌似有很大问题啊!

学无止境!
2009-12-23 19:21
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
#include <stdio.h>
#include <malloc.h>
struct tm
{
    int num;
    struct tm *next;
}*p,*q,*head;

void main()
{
    int i;
    head=NULL;
    for(i=1;i<=25;i++)/*是不是该从1开始啊?*/
    {
        p=(struct tm *)malloc(sizeof(struct tm));
        p->num=i;
        if(head==NULL)
            head=p;
        else
            q->next=p;
        q=p;
    }
    p->next=head;
    p=head;
    while(p->next!=p)
    {
        for(i=0;i<2;i++)
        {
            q=p;
            p=p->next;
        }
        q->next=p->next;
        printf("%4d",p->num);
        free(p);
        p=q->next;
    }
    printf("\n");
    printf("The last number is %d\n",p->num);
}

这是我改的是3的倍数退出的。。。。
包含3的还要改下,我改不了,请其他大侠改下吧,我学习学习!!!!!!!


学无止境!
2009-12-23 19:45
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:8 
程序代码:
#include <stdio.h>
#include <malloc.h>
struct tm
{
    int num;
    struct tm *next;
}*p,*q,*head;

void main()
{
    int i,num=0;
    head=NULL;
     //建立循环链表
    for(i=1;i<=25;i++)//这里从1开始
    { 
        p=(struct tm *)malloc(sizeof(struct tm));
        p->num=i;
        if(head==NULL)
            head=p;
        else
            q->next=p;
        q=p;
    }
    p->next=head;
    
    p=q=head;//不应该是q=head,因为在上个循环中q已经变化;
   //依次删除应该出栈的元素
    while(p->next!=p)
    {
        for(i=0;i<2;i++)
        {
            
            q=p;//不是p=q;
            p=p->next;
        }
        q->next=p->next;
        num++;
        printf("第%d次出列人的序号:%d\n",num,p->num);
        free(p);
        p=q->next;
    }
    printf("最后出列人的序号: %d\n",p->num);
}
你看看效果图是不是你要的效果:
图片附件: 游客没有浏览图片的权限,请 登录注册
2009-12-23 20:06
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <malloc.h>
struct tm
{
    int num;
    struct tm *next;
}*p,*q,*head;

void main()
{
    int i,num=0;
    head=NULL;
     //建立循环链表
    for(i=1;i<=25;i++)//这里从1开始
    { 
        p=(struct tm *)malloc(sizeof(struct tm));
        p->num=i;
        if(head==NULL)
            head=p;
        else
            q->next=p;
        q=p;
    }
    p->next=head;
    
    p=q=head;//不应该是q=head,因为在上个循环中q已经变化;
   //依次删除应该出栈的元素
    while(p->next!=p)
    {
        for(i=0;i<2;i++)
        {
            
            q=p;//不是p=q;
            p=p->next;
        }
        q->next=p->next;
        num++;
        printf("第%d次出列人的序号:%d\n",num,p->num);
        free(p);
        p=q->next;
    }
    printf("最后出列人的序号: %d\n",p->num);
}
你看看效果图是不是你要的效果:
图片附件: 游客没有浏览图片的权限,请 登录注册
2009-12-23 20:11
C78486080
Rank: 2
等 级:论坛游民
帖 子:18
专家分:18
注 册:2009-12-21
收藏
得分:0 
谢谢各位楼主。
2009-12-23 20:12
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:0 
晕了,怎么点一次传了两遍??
2009-12-23 20:15
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
数到3或者3的倍数着出列”。。
我看成了包含3。。。。。

学无止境!
2009-12-23 20:22
快速回复:约瑟夫环
数据加载中...
 
   



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

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