/**
*@filename ballclock.c
*@author haohaibo
*@data 2017/4/13
*@brief 球钟问题解决
**/
#include "stack.h"
#include "lqueue.h"
#include "ballclock.h"
/**
*@brief 解决球钟问题
**/
int ball_clock()
{
int lq_i=1,mincount=0;
int min,fmin,hour=0;
lq_t *lq1=linkqueue_creat(); //创建一个队列
seqstack_t* s1=seqstack_creat(); //定义分钟栈,五分钟栈,小时栈
seqstack_t* s2=seqstack_creat();
seqstack_t* s3=seqstack_creat();
for(lq_i=1;lq_i<=M;lq_i++)
linkqueue_in(lq1,lq_i); //队列加入1-27
//linkqueue_show(lq1);
while(1)
{
if(s1->top<3) //-1~2 共容纳4个值
{
seqstack_insert(s1,linkqueue_out(lq1)); //出列数据放入分钟栈
}
else //分钟栈数值即将超过4
{
for(min=0;min<4;min++) //栈内数据入列
{
linkqueue_in(lq1,seqstack_out(s1));
}
if(s2->top<10) //-1-9容纳11个值
{
seqstack_insert(s2,linkqueue_out(lq1)); //出列入栈
}
else //五分钟栈值即将超过11个
{
for(fmin=0;fmin<11;fmin++)
{
linkqueue_in(lq1,seqstack_out(s2)); //出栈入列
}
if(s3->top<10)
{
seqstack_insert(s3,linkqueue_out(lq1));
}
else
{
for(hour=0;hour<11;hour++)
{
linkqueue_in(lq1,seqstack_out(s3));
}
linkqueue_in(lq1,linkqueue_out(lq1));
}
}
}
mincount++;
if(lq_check(lq1))
break;
}
return mincount;
}
/**
*@brief 检查数据是否回到最初状态
**/
int lq_check(lq_t *lq)
{
int count=0;
lqn_t *p=lq->front->Next;
while(p!=NULL&&p->Next!=NULL)
{
if(p->data>p->Next->data) //保证队列中的数据前一个都小于后一个
return 0;
p=p->Next;
count++;
}
return count==26?1:0; //且队列中一共有27个值
}
/**
*@brief 用于调试
**/
/*
puts("!!*************");
linkqueue_show(lq1);
printf("lq1->real=%p,lq->front=%p\n",lq1->real,lq1->front);
printf("s3->top=%d,s2->top=%d,s1->top=%d\n",s3->top,s2->top,s1->top);
puts("**************!!");
*/
球钟问题解决
需积分: 41 63 浏览量
2017-04-14
09:31:27
上传
评论
收藏 7KB RAR 举报
fire贝
- 粉丝: 49
- 资源: 2
最新资源
- Windows 常见运行运行库32+64
- 基于3KW光伏并网单相逆变器设计(TMS320F28035控制板+显示板+STM32F103功率板)硬件(原理图+PCB)工程
- 正点原子HAL库 STM32F4 外部中断(学习自用附源码)
- delphi rzcombobox DropDownList 灰色背景改为白色
- sap sd.docsap sd.doc
- torch-1.10.2-cp38-cp38-win-amd64.whl
- 菜单栏实现增加数据,修改数据,查询数据,删除数据
- 全国省市区三级联动json文件,带code
- C8_全局&局部&static.zip
- Unity和安卓交互插件Unity调Android Native Goodies PRO
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈