step3 . day5 数据结构之线性表 栈和队的应用-球钟问题
球鐘問題:
球鐘是一個(gè)利用球的移動(dòng)來記錄時(shí)間的簡(jiǎn)單裝置。它有三個(gè)可以容納若干個(gè)球的指示器:分鐘指示器,五分鐘指示器,小時(shí)指示器。若分鐘指示器中有2個(gè)球,5分鐘指示器中有6個(gè)球,小時(shí)指示器中有5個(gè)球,則時(shí)間為5:32。
工作原理:每過一分鐘,球鐘就會(huì)從球隊(duì)列的隊(duì)首取出一個(gè)球放入分鐘指示器,分鐘指示器最多可容納4個(gè)球。當(dāng)放入第五個(gè)球時(shí),在分鐘指示器的4個(gè)球就會(huì)按照他們被放入時(shí)的相反順序加入球隊(duì)列的隊(duì)尾。而第五個(gè)球就會(huì)進(jìn)入分鐘指示器。按此類推,五分鐘指示器最多可放11個(gè)球,小時(shí)指示器最多可放11個(gè)球。當(dāng)小時(shí)指示器放入第12個(gè)球時(shí),原來的11個(gè)球按照他們被放入時(shí)的相反順序加入球隊(duì)列的隊(duì)尾,然后第12個(gè)球也回到隊(duì)尾。這時(shí),三個(gè)指示器均為空,回到初始狀態(tài),從而形成一個(gè)循環(huán)。因此,該秋種表示的時(shí)間范圍是從00:00到11:59
編程心得:調(diào)試了各種方式,雖然沒有BUG,但是始終數(shù)據(jù)和最終答案對(duì)不上,仔細(xì)揣摩了一下,發(fā)現(xiàn)理解錯(cuò)了題目,題目中要求先從隊(duì)中取出球,再對(duì)各個(gè)棧滿進(jìn)行判斷,我之前是先判斷再取球,到時(shí)結(jié)果差十幾天。
終于找到了解決方案,這里只貼出main函數(shù),調(diào)用的函數(shù)均是以前實(shí)現(xiàn)了的,只是封裝進(jìn)頭文件,重新組織一下邏輯,用的是鏈?zhǔn)疥?duì)列和順序棧實(shí)現(xiàn)的。
ps:代碼用的被人的,邏輯和自己的一樣,自己的代碼整理文件的時(shí)候手賤rm -rf了,又多學(xué)一項(xiàng)注意事項(xiàng)
int check(linkqueue *lq)
{
linknode *temp;
temp = lq->front->next;
while(temp->next != NULL)
{
if(temp->data < temp->next->data)
{
temp = temp->next;
}
else
{
return 1;
}
}
return 0;
}
int balltime()
{
linkqueue *lq = linkqueue_create();//duilie
seqstack *s_min = seqstack_create();
seqstack *s_five = seqstack_create();
seqstack *s_hour = seqstack_create();
int i = 0;
for(i = 1;i <= 27;i++)
{
linkqueue_input(lq,i);
}
int count = 0;
while(1)
{
i = linkqueue_output(lq);
count++;
if(s_min->top < 3)
{
seqstack_push(s_min,i);
}
else
{
while(!seqstack_is_empty(s_min))
{
linkqueue_input(lq,seqstack_pop(s_min));
}
if(s_five->top < 10)
{
seqstack_push(s_five,i);
}
else
{
while(!seqstack_is_empty(s_five))
{
linkqueue_input(lq,seqstack_pop(s_five));
}
if(s_hour->top < 10)
{
seqstack_push(s_hour,i);
}
else
{
while(!seqstack_is_empty(s_hour))
{
linkqueue_input(lq,seqstack_pop(s_hour));
}
linkqueue_input(lq,i);
if(check(lq) == 0)
{
for(i = 1;i<=27;i++)
{
printf("%d ",linkqueue_output(lq));
}
putchar(10);
return count;
}
}
}
}
}
}
int main(int argc, const char *argv[])
{
int count = 0;
count = balltime();
printf("%d , hour = %d ,day = %d\n",count,count/60,count/60/24);
return 0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/huiji12321/p/11240899.html
總結(jié)
以上是生活随笔為你收集整理的step3 . day5 数据结构之线性表 栈和队的应用-球钟问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 共享上网 路由器设置图解
- 下一篇: step3 . day6数据结构之非线性