排序系统设计

题目:

功能:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。

分步实施:

(1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

(2)完成最低要求:建立一个文件,包括某人5个人的情况。

(3)进一步要求:在此基础上可以设计扩充程序功能。

 

#include<stdio.h>
#include<time.h>
#include<malloc.h>
#include<stdlib.h>

#define MAX 100


typedef struct people
{
    int source;
    int code;
    struct people *next;
}Man;


void PlayGame(Man *p1,int m)
{
    int count=1;
    Man *p2=p1->next;

    printf("出队的顺序如下\n");
    while(p2->next!=p2)
    {
        if(count==m)
        {
           p1->next=p2->next;
           printf("%4d(%d)",p2->source,p2->code);
           count=1; 
           m=p2->code;
           free(p2);
           p2=p1->next;
        }
        else
        {
            p1=p2;
            p2=p2->next;
            count++;
        }

    }
    printf("%4d(%d)",p2->source,p2->code);
    printf("\n");
}


Man * CreateMan()
{
    int man=0;
    int m=0;
    int i=0;
    Man *p1,*p2,*head;
    randomize();

    printf("输入玩游戏的人数:\n");
    scanf("%d",&man);
    for(i=1;i<=man;i++)
    {
        p1=(Man *)malloc(sizeof(Man)*man);
        p1->source=i;
        p1->code=rand()%5+1;
        p1->next=NULL;
        if(i==1)
        {
            head=p1;
            p2=p1;
        }
        else
        {
            p2->next=p1;
            p2=p1;
        }
    }
    p2->next=head;

    printf("人的编号和各自的密码为:\n");
    p1=head;
    for(i=1;i<=man;i++)
    {
        printf("%4d(%d)",p1->source,p1->code);
        p1=p1->next;
    }
    printf("\n");
    return p2;
}
void main()
{
    Man *p1;
    int start=0;
   
    system( "graftabl 936 ");
    p1=CreateMan();
    printf("出队的m序号:\n");
    scanf("%d",&start);
    PlayGame(p1,start);
    getch();
}

posted @ 2017-09-22 23:00  lijianzhq  阅读(246)  评论(0)    收藏  举报