您的位置:首页 > 其它

5-4 jmu-报数游戏 (15分)

2017-04-21 00:15 465 查看
#include<stdio.h>

#include<stdlib.h>

typedef int ElemeType;

typedef struct cod

{

    ElemeType data[100001];

    int rare,front;

    int MaxSize;

} CirQueue;

CirQueue *InitCQueue() //将队列置为空

{

    CirQueue *q=(CirQueue *)malloc(sizeof(struct cod));

    q->rare=q->front=0;

    q->MaxSize=100001;

    return q;

}

int EnCqueue(CirQueue *q,ElemeType x) //入队

{

    if(((q->rare)+1)%(q->MaxSize)==q->front)//判断队列是否满了

    {

        printf("The Queue is flow!!!!\n");

        return 0;

    }

    q->data[q->rare]=x;

    q->rare=(q->rare+1)%(q->MaxSize);//将对应的下表向后移动

    return 1;

}

int DeCqueue(CirQueue *q,ElemeType *x) //出队

{

    if(q->rare==q->front) //判断表是否为空

    {

        printf("\nGame over!!!!!!!!\n");

        return 0;

    }

    *x=q->data[q->front];

    q->front=(q->front+1)%(q->MaxSize);//将对应的下表向后移动

    return 1;

}

//int CQueueLength(CirQueue *q) //计算出当前的元素的个数

//{

//    return (q->rare-q->front+q->MaxSize)%q->MaxSize;

//}

int test()

{

    CirQueue *q=InitCQueue();

    int count;

    int key;

    int con;

    int cache;

    scanf("%d",&count);

    scanf("%d",&con);

    if(con>count){

        printf("error!");

        return 0;

    }

    cache=con;

    int i=1;

    while(count--){

        EnCqueue(q,i++);

    }

    while(q->rare!=q->front)

    {

        while(--con){//跳过前面的值

        DeCqueue(q,&key);//先取出值

        EnCqueue(q,key);//再次存入值

        }

        if(((q->front)+1)%(q->MaxSize)==q->rare)//判断最后一个不加上空格

        {

            DeCqueue(q,&key);//取除但是不存入

            printf("%d",key);//显示取出的值

            break;

        }

        if(q->rare!=q->front)

        {

            DeCqueue(q,&key);//取除但是不存入

            printf("%d ",key);//显示取出的值

        }

        con=cache;//让计数器回到原来的值

    }

}

int main()

{

//    CirQueue *q=InitCQueue();

//    int count;

//    int x;

////    int value;

//    scanf("%d",&count);//给定要输入的个数

//    while(count--) //为每一个数进行赋值

//    {

//        scanf("%d",&x);

//    }

//    //下面是正常遍历的结果,因为会与后面的生死者游戏冲突所以这里我把它注释掉了

////    while(DeCqueue(q,&value)){

////        printf("%d\t",value);

////    }

    //实现12的生死者游戏

    test();

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: