为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

学渣小白 的学生作业:

1.1要想表示00:00到12:00最少需要多少个球? 答:最少需要27个球。11+11+4=26即在11:59分时,分钟球4个,五分钟球11个,小时球4个。但是还需要一个球来产生递进,所以最少球:26+1=27。 1.2假设,指示器都为空,球队列需要多长时间能回到原来的状态(即从初始球队列中球的顺序,经过球的循环后球队列中的球再次与初始顺序相同)? #include #include #include #define debug 0 #define DEBUG_PRINT(…) do{ if(debug) printf(VA_ARGS); } while(0) #define N 28 //队列长度为27因为为了区分队空和队满状态,通常会浪费一个存储单元。 typedef int data_t; typedef struct{ data_t buf[N];//定义数组存储数据 int front;//队头元素的下标 int rear;//队尾元素的下标 }loopqueue_t; //节点类型设计 typedef struct node{ data_t data; struct node *next; }linknode_t; //栈头类型设计 typedef struct{ linknode_t *top;//栈顶指针 int n;//记录当前栈中元素个数 }linkstack_t;//1.创建空的循环队列 loopqueue_t * create_empty_loopqueue() { loopqueue_t * queue = (loopqueue_t *)malloc(sizeof(loopqueue_t)); if(queue == NULL) { perror(“malloc is fail!\n”); return NULL; } memset(queue, 0, sizeof(loopqueue_t)); // queue->front = queue->rear=0; return queue; } //2.对空 int is_empty_loopqueue(loopqueue_t *queue) { return queue->front == queue->rear; } //3.队满 int is_full_loopqueue(loopqueue_t *queue) { return (queue->rear+1)%N == queue->front; } //4.入队 void enqueue_loopqueue(loopqueue_t *queue, data_t data) { if(is_full_loopqueue(queue)) { printf(“Queue is full!\n”); exit(-1); } queue->buf[queue->rear] = data; queue->rear = (queue->rear+1)%N; return; } //5.出队 data_t dequeue_loopqueue(loopqueue_t *queue) { if(is_empty_loopqueue(queue)) { printf(“Queue is empty!\n”); exit(-1); } data_t data = queue->buf[queue->front]; queue->front = (queue->front+1)%N; return data; } //1.创建空的链式栈–为栈头在堆区分配空间 linkstack_t *create_empty_stack() { linkstack_t *stack = (linkstack_t *)malloc(sizeof(linkstack_t)); if(stack == NULL) { perror(“malloc is fail!\n”); return NULL; } memset(stack, 0, sizeof(linkstack_t)); return stack; } //2.判断栈是否为空 int is_empty_stack(linkstack_t *stack) { return stack->top == NULL? 1 : 0; } //3.入栈 void push_linkstack(linkstack_t *stack, data_t data) { linknode_t *node = (linknode_t *)malloc(sizeof(linknode_t)); if(node == NULL) { printf(“malloc is fail!\n”); return; } node->data = data; //插入数据,类似链表的头插法 node->next = stack->top; stack->top = node; //更新n的值 stack->n++; return; } //4.出栈 data_t pop_linkstack(linkstack_t *stack) { data_t data;//1.保存要删除节点的数据 linknode_t *temp = stack->top;//2.取出数据 data = temp->data;//3.更新栈顶指针 stack->top = temp->next;//4.释放节点 free(temp);//5.更新n的值 stack->n–; return data; } //5.输出栈顶元素的值 data_t get_top_data(linkstack_t *stack) { return stack->top->data; } //加入小球且判断指示器是否满了 int add_indicator_judge_max(linkstack_t *indicator_t ,int push_num ,int max_ball) { //判断栈是否满了 if(indicator_t->n == max_ball) { DEBUG_PRINT(“Stack is full!\n”); return 1; } push_linkstack(indicator_t,push_num); return 0; } void out_indicator_join_team(linkstack_t *indicator_t,int max_ball,loopqueue_t *queue ) { int count=0; while(!is_empty_stack(indicator_t)) { int temp_ball=pop_linkstack(indicator_t); // DEBUG_PRINT(“Dequeue temp_ball = %d\n”,temp_ball); enqueue_loopqueue(queue,temp_ball); count++; } if(count!=max_ball){ printf(“WARRING:Not enough balls!\n”); printf(“count=%d\n”,count); printf(“max_ball=%d\n”,max_ball); exit(-1); } } int is_initial_state(loopqueue_t *queue) { int num=0; int flag=1; int index=queue->front; data_t data0; do{ data0 = queue->buf[(index++)%N]; if(data0!=num){flag=0;} num++; } while (num< N-1); return flag; } int main(int argc, const char *argv[]){ //DEBUG_PRINT (“Simplified debugging: temp=% d, formula calculation:% d \n”, temp, temp+10); int i=0; int count_min=0; int temp_ball; loopqueue_t *team_column = create_empty_loopqueue(); linkstack_t *minute_indicator=create_empty_stack(); linkstack_t *five_minute_indicator=create_empty_stack(); linkstack_t *hour_indicator=create_empty_stack(); //初始化先将0-26即27个数字球入队列 while(!is_full_loopqueue(team_column)) { enqueue_loopqueue(team_column,i++); } // while(!is_empty_loopqueue(team_column)) // { // printf(“Team data = %d\n”,dequeue_loopqueue(team_column)); // } while(1) { count_min++; temp_ball=dequeue_loopqueue(team_column); if (count_min%60==0){DEBUG_PRINT ("count_min=%d\n",count_min);} // DEBUG_PRINT(“Dequeue temp_ball = %d\n”,temp_ball); //判断个数字球 if (add_indicator_judge_max(minute_indicator,temp_ball,4)){ DEBUG_PRINT(“minute_indicator is full!\n”); out_indicator_join_team(minute_indicator,4,team_column); //此时temp还没有入栈 if(add_indicator_judge_max(five_minute_indicator,temp_ball,11)){ out_indicator_join_team(five_minute_indicator,11,team_column); DEBUG_PRINT(“five_minute_indicator is full!\n”); // break; if(add_indicator_judge_max(hour_indicator,temp_ball,11)){ out_indicator_join_team(hour_indicator,11,team_column); DEBUG_PRINT(“The team is full!\n”); //恢复队列 enqueue_loopqueue(team_column,temp_ball); } } } if(is_initial_state(team_column)){ DEBUG_PRINT("IS INITIAL STATE!\n"); break; } } DEBUG_PRINT("\n--------------talisman-----------\n"); DEBUG_PRINT("minute_indicator is full!\n"); DEBUG_PRINT ("count_min=%d\n",count_min); printf("The final required number of minutes is" "\n"); printf("%d\n",count_min); printf("The final required number of hours is" "\n"); printf("%d\n",count_min/60); printf("The final required number of days is" "\n"); printf("%d\n",count_min/60/24); // while(!is_empty_loopqueue(team_column)) // { // DEBUG_PRINT(“Team data = %d\n”,dequeue_loopqueue(team_column)); // } return 0; } The final required number of minutes is 33120 The final required number of hours is 552 The final required number of days is 23

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号