论坛: 编程破解 标题: 一道 PASCAL的问题,解约瑟夫问题 复制本贴地址    
作者: yga [yga]    论坛用户   登录
设计程序解约瑟夫问题。设有M个人转坐一圈,要求从第N个人开始报数,
数到K的人出列。再从下一个人开始继续报数,数到K时又出列。・・・
,依此下去 ,直到所有的人都出列。要求程序模拟此游戏,输出依次出列的人的编号,M、N和K从键盘临时输 入,采用图示方式运行。



地主 发表时间: 07/02 13:18

回复: cimsxiyang [cimsxiyang]   版主   登录
有个例程。你看一下:
代码:

#include  <stdio.h> 
#include  <stdlib.h> 
#include  <conio.h>  
//建立结构 
struct ManNode 
{     
    int     Number;     
    struct ManNode * Next;                 
    int Password; 
};  
void main() 
{      
    int m;     
    int NumMan;     
    struct ManNode *  Head;      
    void DeleteNode(int ManNumber,int number,struct ManNode * head);     
    struct ManNode * CreateList(int NumOfMan);      
    printf("请输入参加的人数:\n");     
    scanf("%d",&NumMan);      
    Head=CreateList(NumMan);      
    printf("请输入刚开始任选的人数m:\n");     
    scanf("%d",&m);      
    DeleteNode(NumMan,m,Head);       
    getch();     
    free(Head);      
}  
struct ManNode * CreateList (int NumOfMan) 
{       
    struct ManNode * head,*ManNodePtr1,*ManNodePtr2;     
    head=NULL;     
    int Num=1;     
    ManNodePtr2=(struct ManNode *)malloc(sizeof(struct ManNode));                                         
    //分配存储单元     
    printf("请输入用户所持有的密码:");     
    scanf("%d",&ManNodePtr2->Password);     
    ManNodePtr2->Number =Num;      
    head=ManNodePtr2;     
    while(Num!=NumOfMan)     
    {         
        Num++;         
        ManNodePtr1=(struct ManNode *)malloc(sizeof(struct ManNode));         
        printf("请输入用户所持有的密码:");             
        scanf("%d",&ManNodePtr1->Password);         
        ManNodePtr1->Number =Num;           
        ManNodePtr2->Next =ManNodePtr1;         
        ManNodePtr2=ManNodePtr1;     
    }     
    ManNodePtr2->Next =head;     
    printf("输入结束!\n");     
    return head;  
}  
void  DeleteNode (int ManNumber,int number,struct ManNode * head) 
{     
    int num=1;    
    struct ManNode *ManNodePtr1;      
    struct ManNode *ManNodePtr2;      
    ManNodePtr1=ManNodePtr2=head;    
    while(ManNumber>0)     
    {         
        while(num!=number)         
        {             
            ManNodePtr2=ManNodePtr1;            
            ManNodePtr1=ManNodePtr1->Next ;             
            number--;          
        }          
        number=ManNodePtr1->Password;      
        printf("出列人的编号:%d\n",ManNodePtr1->Number) ;     
        ManNodePtr2->Next =ManNodePtr1->Next ;         
        ManNodePtr1=ManNodePtr1->Next ;       
        ManNumber--;     
    }     
    printf("\n运行结束!!!\n"); 
}   




B1层 发表时间: 07/03 01:14

回复: pcfan [pcfan]   论坛用户   登录
老大,你真不够意思咧!
我前面问的题你怎么不回答啊!
待人不分平哦!
我要投述。
嘻嘻!开个玩笑!
对了,你的系统分析报名了没有?
我报了高程了,以后还得多找你哦!

B2层 发表时间: 07/03 07:20

回复: cimsxiyang [cimsxiyang]   版主   登录
我今天去报名

B3层 发表时间: 07/03 08:08

回复: cimsxiyang [cimsxiyang]   版主   登录
我考虑了一下,还是考网络设计师了
还花了170块。心疼啊
可以抽17包烟啊。哎~~~~~~~~~~~~~~~~


B4层 发表时间: 07/03 11:04

回复: coconut [coconut]   论坛用户   登录
哗~~你抽这么贵的烟呀。。。
别抽那么多呀。小心抽死你

B5层 发表时间: 07/05 01:33

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号