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

#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;
}

  

时间: 2024-10-05 20:14:31

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

手把手教你写Windows 64位平台调试器

本文网页排版有些差,已上传了doc,可以下载阅读.本文中的所有代码已打包,下载地址在此. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 手写一个调试器有助于我们理解hook.进程注入等底层黑客技术具体实现,在编写过程中需要涉及大

新手的痛苦!!!!!千辛万苦写出来代码,百般调试,就是不能实现功能,一个新手多长时间才能步入技术正规!!!

新手的痛苦!!!!!千辛万苦写出来代码,百般调试,就是不能实现功能,一个新手多长时间才能步入技术正规!!! name="<html<head lang="en"<meta charset="UTF-8"<title联动菜单title<script type="text/javascript"var area=[ ['朝阳','海淀','门头沟'], [' 淮南','淮北','合肥'], ['咸阳','西安'

使用 Eclipse 调试 Java 程序的技巧【9】

若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ 本文版权归作者和博客园共有,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利. 使用 Eclipse 调试 Java 程序的技巧 不要调试太多 只调试你觉得有问题的代码或者一部分一部分功能的调试: [ 断点视图 : 条件断点] 如果你只对应用中的某部分感

windows程序员C/C++转向linux程序员时,如何编写、调试linux程序

windows程序员使用vs或windbg进行调试相当熟悉,转到linux下面,要进行程序的编写.调试,往往非常痛苦(或者说不习惯吧).目前可以找到的各种IDE或编辑软件相当多,我试过的有eclipse+cdt+gdb,codeblock+gdb,vi+cgdb,都是不太理想,时不时的想往vs上靠,一直还是有vs的情结. 某日,正在查找gdb如何显示当前进程加载的动态库时,查到了visualgdb中关于gdb的教程,此时猛然想起了visualgdb这个工具(原来在用visualddk的时候瞧见过

如何调试PHP程序

调试的定义:通过一定方法,在程序中找到并减少缺陷的数量,从而使其能正常工作.这里说一些如何调试PHP程序的经验. 一.PHP自带的调试功能 1.自带的报错功能 两个名词:开发环境是开发人员在进行开发和调试的环境,生产环境是最终客户在用的线上环境:开发环境和生产环境要分开设置报错功能. (1)开发环境开发环境需要打开报错,以下是php.ini的配置项及其说明: ; This directive sets the error reporting level.; Development Value:

【Eclipse】eclipse调试java程序的九个技巧

本文转自[半夜乱弹琴],原文地址:http://www.cnblogs.com/lingiu/p/3802391.html 九个技巧: 逻辑结构 条件debug 异常断点 单步过滤 跳到帧 Inspect expressions display 远程debug 最早开始用eclipse的debug的时候,只会F5 F6 F7 F8,甚至F7都不是很搞的明白是怎么用的,那时候资浅,碰不到需要复杂debug的代码,慢慢工作深入了,场景碰多了,就需要各种debug技巧来提升定位bug效率,以前找人帮忙

使用 GDB 调试多进程程序

GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较. 3 评论 田 强 ([email protected]), 软件工程师, IBM中国软件开发中心 2007 年 7 月 30 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大.对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统: 进程

调试应用程序内存中的神秘问题

IBM i 堆内存调试助手 无论在哪种平台上,调试应用程序内的堆内存问题都极为困难.幸运的是,IBM i 6.1 及更高版本提供了相关支持,能帮助用户在 ILE 环境内调试堆内存问题.本文介绍了堆内存是什么,还展示了通过多种 ILE 语言使用堆内存的正确方法,这些语言包括 C.C++.RPG.COBOL 和 CL.此外,本文还描述了使用堆内存时可能出现的一些常见问题,以及如何利用 IBM i 中的支持功能调试这些问题. 1 评论: Scott Hanson, 软件工程师, IBM 2013 年

使用Eclipse调试Java 程序的10个技巧

你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方便的功能. 那能为你省下一些时间,也将会使你的生活更安逸.轻松.同时也表明其它关于此主题的帖子也是很有价值的. 第1条:不要调试太多 一个关于调试的疯狂声明作为开头.但它必须是要说的!尝试切分一下你那复杂的逻辑成多个独立的单元,并编写单元测试来检测你代码的正确性.我想像如下 这样的流程应该是发生得非常频繁的-