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;
}
#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;
}
相关文章推荐
- 计蒜客 奇怪的报数游戏(树状数组+二分+思路)
- B - 报数游戏
- 报数游戏,滑动解锁,蓝桥
- 【英雄会】报数游戏
- 英雄会报数游戏(3)实现
- CSU_1101_报数游戏
- 算法:报数游戏
- 报数游戏 湖南省第七届省赛
- 报数游戏
- 英雄会(csdn pongo)题解之报数游戏3
- 报数游戏python 解答
- 编程题:报数游戏
- toj 4316 报数游戏
- CSDN 报数游戏-双向循环链表实现
- 英雄会-----报数游戏(3)
- 报数游戏湖南2011省赛
- 一个报数游戏js版(约瑟夫环问题)
- 【转】一个报数游戏(约瑟夫环问题)
- 湖南省第七届大学生计算机程序设计竞赛 报数游戏
- 蓝桥杯赛题-填空题:报数游戏(Vector.add()与Vector.remove())