日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

step3 . day5 数据结构之线性表 栈和队的应用-球钟问题

發(fā)布時(shí)間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 step3 . day5 数据结构之线性表 栈和队的应用-球钟问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

球鐘問題:

球鐘是一個(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。