大家好,我是一只学弱狗,记录学习的点点滴滴!
优质文章
优质专栏
蓝桥杯马上就又开始了,赶紧准备准备以不至于被虐的太惨,从一个简单的算法题开始。
题目描述
有n项任务,每项任务加工时间已知,从0时刻开始陆续安排到一台机器上加工,每个任务的完成时间是从0时刻到任务加工截止的时间,求总完成时间(所有任务完成时间之和)最短的安排方案。
#include <iostream>
//不解释
#include <algorithm>
//从文件中读取测试数据
#include <conio.h>
using namespace std;
#define N 101
//任务的个数
int n;
//从大到小排序
int cmp(int a,int b){
return a>b;
}
void process(int *data){
//默认递增排序
sort(data+1,data+n+1);
//sort(data+1,data+n+1,cmp);
//从大到小排序
}
int main(){
//从文件中读取数据
freopen("调度问题.txt","r",stdin);
cin>>n;
int * times = new int[n+1];//各个任务的执行时间
int sum = 0;
for(int i=1;i<=n;i++) cin>>times[i];
process(times);
for(int i=1;i<=n;i++) cout<<times[i]<<" ";
cout<<endl;
for(int i=1;i<=5;i++){
for(int j=1;j<=i;j++){
sum+= times[j];
}
cout<<"第"<<i<<"个任务:"<<sum<<endl;
}
//内存空间释放
delete[] times;
times = NULL;
return 0;
}
主要是看一下排序,我个人不喜欢用数组的第一个下标,所以在排序时不需要它,假设数组长度为6,则下标是0-5,不要下标0,所以需对数组索引从1-5进行排序,画一下,让自己注意下排序的索引,对1-5的元素排序,应该从data+1到data+5+1。
sort的一个函数重载可以使用一个cmp方法来实现比较策略,是按照从大到小比较还是从小到大比较,这是如何实现的呢?哦,原来是一种设计模式,策略模式,我拿Java语言来说。
在Java语言中,也有一个java.util.Comparator接口