因此,该秋种表示的时间范围是从00:00到11:59。
利用前面两篇文章中的栈和队列,解决该问题:
解决方法有多种,本人的方案如下:
/************************************************************************* > File Name: main.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Wed 08 Mar 2017 04:00:57 AM PST ************************************************************************/ #include"linkqueue.h" #include"linkstack.h" int main(int argc, const char *argv[]) { int ball; int m5ball; int m60ball; int m720ball; int time_1minu = 0; int time_5minu = 0; int time_60minu = 0; int time_12h = 0; int num_array[27] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 21, 22, 23, 24, 25, 26, 27 }; LinkQueue* ballqueue; LinkStack* stack_minu_5; // 5 minutes LinkStack* stack_minu_60; // 60 minutes = 1 hour LinkStack* stack_minu_720; // 720 minutes = 12 hours ballqueue = create_empty_linkqueue(); stack_minu_5 = create_empty_linkstack(); stack_minu_60 = create_empty_linkstack(); stack_minu_720 = create_empty_linkstack(); for(int i = 0; i < 27; i++) { enter_linkqueue(ballqueue, num_array[i]); } printf("1. create ballqueue ok.\n"); while(1) { ball = delete_linkqueue(ballqueue); if(stack_minu_5->n < 4) { // 1分钟的球栈未满 push_linkstack(stack_minu_5, ball); time_1minu += 1; } else { // 1分钟的球栈已满 // 弹出1分钟栈中的球,放入球队列中 printf("5m full\n"); while(!is_empty_linkstack(stack_minu_5)) { m5ball = pop_linkstack(stack_minu_5); enter_linkqueue(ballqueue, m5ball); } // 将之前导致1分钟球栈满的球拿过来,放入5分钟的球栈 // 放入之前先检查5分钟球栈是否已满 if(stack_minu_60->n < 11) { // 5分钟的球栈未满 time_1minu = 0; time_5minu += 5; push_linkstack(stack_minu_60, ball); } else { // 5分钟的球栈已满 // 弹出5分钟栈的球, 放入球队列中 printf("60m full\n"); while(!is_empty_linkstack(stack_minu_60)) { m60ball = pop_linkstack(stack_minu_60); enter_linkqueue(ballqueue, m60ball); } // 将之前导致5分钟球栈满的球拿过来放入1小时球栈 // 放入之前, 先检查1小时球栈是否已满 if(stack_minu_720->n < 11) { // 未满 time_5minu = 0; time_60minu += 60; push_linkstack(stack_minu_720, ball); } else { printf("12h full\n"); // 12小时的球栈已满, // 弹出12小时的球栈,放入球队列中 while(!is_empty_linkstack(stack_minu_720)) { m720ball = pop_linkstack(stack_minu_720); enter_linkqueue(ballqueue, m720ball); } // 将之前导致1小时球栈满的球拿过来 放入球队列, 最后一颗球归还 // 这种情况就是4 4 11 颗球的情况,这颗球时从最前面过来的球就是 ball enter_linkqueue(ballqueue, ball); time_12h += 12; // 判断球队列是否时1-27的有序队列 int k = 1; for(int i = 1; i <= 27; i++) { ball = delete_linkqueue(ballqueue); printf("i = %d, ball = %d\n", i, ball); if(i == ball) { k++; if(k == 27) { printf("time_12h = %d\n", time_12h); printf("day = %d\n", time_12h/24); printf("ok mission accomplished.\n"); goto ret; } } enter_linkqueue(ballqueue, ball); } k = 0; // } } } } ret: return 0; }结果输出result:
。。。。。。。。。。。。。。。。。
i = 23, ball = 23 i = 24, ball = 24 i = 25, ball = 25 i = 26, ball = 26 i = 27, ball = 27 time_12h = 552 day = 23
棒棒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒哒