• 54 jmu报数游戏 (15分)


    #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;
    }
  • 相关阅读:
    遍历 HashMap 的 5 种最佳方式
    Spring注入方式
    搜索引擎
    MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP
    向Arcglobe中添加MouseWheel事件,使其具有鼠标放大缩小功能。
    js eval
    鼠标指针图标:C#设置鼠标指针图标(转)
    对象模型图【OMD】阅读指南(转)
    ArcGIS 9.3 VBA 环境不可用问题的解决
    用实例学ASP.net2.0的CallBack机制[一] 20080308 11:33
  • 原文地址:https://www.cnblogs.com/csnd/p/16675733.html
Copyright © 2020-2023  润新知