码迷,mamicode.com
首页 > 其他好文 > 详细

PAT1017 写了个不会调试的程序,改不下去了以后再改吧

时间:2016-09-01 18:31:12      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<iostream>
#include<stdlib.h>//malloc?
#define ERROR 0
#define MAX 10000
using 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 写了个不会调试的程序,改不下去了以后再改吧

标签:

原文地址:http://www.cnblogs.com/lsj2020/p/5830498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!