| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 581 人关注过本帖
标题:大虾们帮下忙。。。【关于出列问题】。
只看楼主 加入收藏
dtczhl
Rank: 1
来 自:浙/杭
等 级:新手上路
帖 子:533
专家分:0
注 册:2008-9-4
结帖率:100%
收藏
 问题点数:0 回复次数:5 
大虾们帮下忙。。。【关于出列问题】。
[基本要求]
有1至 N编号的N 个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始以正整数m作为报数上限值,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的报数上限值,从他的顺时针方向上的下一个人开始重新报数,如此下去,直至所有的人全部出列为止,要求产生记录出列顺序的表。如N = 7,每个人的密码依次是:3,1,7,2,4,8,4,m的值为20,则出列顺序为6,1,4,7,2,3,5。所有人用一个循环单链表表示,表中每个结点代表一个人,按出列次序依次将结点从循环单链表中删除,并按顺序存放在一个单链表中,链表的每个结点包括三个字段:code代表密码,no代表人的编号,link是指向下一个结点的指针。在主函数中,用堆分配的方法建立对象。循环展开对问题的求解。
希望注释能多点,不要用复杂的函数和表达式。。我是个菜鸟。。。。谢谢啦。。
搜索更多相关主题的帖子: 出列 
2008-09-05 20:08
aizhinuo
Rank: 2
等 级:论坛游民
帖 子:28
专家分:10
注 册:2008-9-5
收藏
得分:0 
你的问题和我做曾经编多的程序差不多
2008-09-05 20:56
dtczhl
Rank: 1
来 自:浙/杭
等 级:新手上路
帖 子:533
专家分:0
注 册:2008-9-4
收藏
得分:0 
回复 2# aizhinuo 的帖子
能麻烦下把程序发给我吗??
2008-09-05 21:39
aizhinuo
Rank: 2
等 级:论坛游民
帖 子:28
专家分:10
注 册:2008-9-5
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct list
{
    int data;
    struct list *next;
    struct list *pre;
};
/*双向链表的定义*/                              
typedef struct list node;
typedef node *link;
link front=NULL,rear,ptr,head=NULL;

link push(int item)
{
    link newnode=(link)malloc(sizeof(node));
    newnode->data=item;
    if(head==NULL)
    {
        head=newnode;
        head->next=NULL;
        head->pre=NULL;
        rear=head;
    }
    else
    {
        rear->next=newnode;
        newnode->pre=rear;
        newnode->next=head;
        head->pre=newnode;
        rear=newnode;
    }
    return head;
}
/*链表节点的插入*/
void main()
{

    int n,i,m,x=1,y=1,k=1,t,j,out;
    FILE *fp;
    if((fp=fopen("result.txt","w"))==NULL)
    {
        printf("Cannot open the file.\n");
        exit(0);
    }
    printf("输入参加小孩的总人数:\n");
    scanf("%d",&t);
    printf("按顺序输入%2d名小孩的序号.\n输入第个%2d小孩的号码:\n",t,k++);
    scanf("%d",&n);
    front=push(n);
    for(i=0;i<t-1;i++)
    {
        printf("输入第个%2d小孩的号码:\n",k++);
        scanf("%d",&n);
        push(n);
    }
    printf("输入报数值m:\n");
    scanf("%d",&m);
    ptr=head;
    for(i=0;i<t-1;i++)
    {
        {
            for(j=1;j<m;j++)
            ptr=ptr->next;
            out=ptr->data;
            printf("第%2d个被淘汰的是:%2d号选手.\n",x++,out);
            ptr->pre->next=ptr->next;
            ptr->next->pre=ptr->pre;
            /*链表中节点的删除*/
            fprintf(fp,"第%2d个被淘汰的是:%2d号选手.\n",y++,out);
        }
        ptr=ptr->next;
    }
    printf("最后的胜利者是:%2d号选手.\n",ptr->next->data);
    fprintf(fp,"最后的胜利者是:%2d号选手.",ptr->next->data);
}

你自己看看吧 改改就行了
2008-09-06 09:29
dtczhl
Rank: 1
来 自:浙/杭
等 级:新手上路
帖 子:533
专家分:0
注 册:2008-9-4
收藏
得分:0 
十分感谢。。。。
2008-09-06 14:38
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
约瑟夫环……

自己查百度百科,里面写得很好……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-06 15:01
快速回复:大虾们帮下忙。。。【关于出列问题】。
数据加载中...
 
   



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

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