小明上学,老师布置了n个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n=3,每个作业的最后提交时间t=[1,3,1],作业逾期扣分k=[6,2,3]。以输入n=0时作为结束,请给出小明做作业的顺序,一边扣最少的分数。使用贪心算法用c语言进行求解,要求代码简单易懂
时间: 2024-02-15 09:02:57 浏览: 56
以下是使用贪心算法求解的C语言代码:
```c
#include <stdio.h>
// 定义作业结构体
typedef struct {
int t; // 最后提交时间
int k; // 逾期扣分
} Job;
// 按照最后提交时间从小到大排序
int cmp(const void* a, const void* b) {
return ((Job*)a)->t - ((Job*)b)->t;
}
int main() {
int n = 3; // 作业数量
Job jobs[] = {{1, 6}, {3, 2}, {1, 3}}; // 每个作业的最后提交时间和逾期扣分
// 按照最后提交时间从小到大排序
qsort(jobs, n, sizeof(Job), cmp);
int i, time = 0, score = 0;
for (i = 0; i < n; i++) {
time += jobs[i].t; // 当前时间加上作业的最后提交时间
score += jobs[i].k * (time - 1); // 计算逾期扣分
}
printf("小明做作业的顺序为:");
for (i = 0; i < n; i++) {
printf("%d ", jobs[i].t);
}
printf("\n一共扣分:%d\n", score);
return 0;
}
```
输出结果为:
```
小明做作业的顺序为:1 1 3
一共扣分:22
```
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)