首页 > 代码库 > PAT1017 写了个不会调试的程序,改不下去了以后再改吧
PAT1017 写了个不会调试的程序,改不下去了以后再改吧
#include<stdio.h>#include<iostream>#include<stdlib.h>//malloc?#define ERROR 0#define MAX 10000using namespace std;//定义元素类型customer struct customer{ int time_arrive;//以秒计 同下 int time_done;// int time_processing;// int time_remain;//余下时间,开始=processing };int cmp ( const void *a , const void *b ){ return (*(struct customer *)a).time_arrive >(*(struct customer *)b).time_arrive?1:-1; }bool winava(struct customer* win[],int k){ for(int i=0;i<k;i++){ if(win[i]==NULL) return true; } return false;}int MyMin(struct customer* win[],int k){//当窗口都没有人时返回最大值 int min=60*61; while(k--){ if(win[k]!=NULL&&min>win[k]->time_remain) min=win[k]->time_remain; } return min;}bool clear(struct customer* win[],int k){ for(int i=0;i<k;i++) if(win[i]!=NULL) return 0; return 1;}int main(){ int n,k,axis=28800,h,m,s,process,order=0;//n:cus,k:windows order记录以处理的客户 0开始 scanf("%d%d",&n,&k); struct customer *cus=(struct customer*)malloc(sizeof(struct customer)*k); for(int i=0;i<n;i++){ scanf("%d:%d:%d",&h,&m,&s); scanf("%d",&process); if(60*60*h+m*60+s>61200){//晚于17点 n--; i--; continue; } cus[i].time_arrive=60*60*h+m*60+s;//以秒计时 cus[i].time_remain=cus[i].time_processing=process*60; cus[i].time_done=0; } qsort(cus,n,sizeof(struct customer),cmp);//按到达时间排序 struct customer* win[k]; for(int i=0;i<k;i++) win[i]=NULL; while(!(order==n&&clear(win,k))){//order==n时表示队列空 int min=MyMin(win,k); if(order!=n&&(cus[order].time_arrive-axis<min)&&winava(win,k)){//队首到达-axis<min(窗口)&&窗口有空 order==n时表示队列空 出队 for(int i=0;i<k;i++){ if(win[i]!=NULL){ win[i]->time_remain-=(cus[order].time_arrive-axis); } } axis=cus[order].time_arrive; for(int i=0;i<k;i++){ if(win[i]==NULL){ win[i]=&cus[order]; break; } } order++; } else{//处理一个 axis+=min; for(int i=0;i<k;i++){ if(win[i]!=NULL&&min==win[i]->time_remain){ win[i]->time_done=axis; cout<<win[i]->time_done-win[i]->time_arrive<<endl; win[i]=NULL; } else if(win[i]!=NULL){ win[i]->time_remain-=min; } } } } int sum=0; for(int i=0;i<n;i++){ sum+=cus[i].time_done-cus[i].time_arrive-cus[i].time_processing; } double ave=sum/n; printf("%0.1f",ave/60); return 0;}
PAT1017 写了个不会调试的程序,改不下去了以后再改吧
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。