小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。用C语言
时间: 2024-02-15 22:06:15 浏览: 30
下面是用C语言实现的代码,使用冒泡排序算法对作业按照最后提交时间进行排序,然后依次计算完成作业的扣分情况,最后输出小明扣除的总分数。
```c
#include <stdio.h>
int main() {
int n, i, j, temp;
int t[100], k[100], finish[100], score = 0;
while (1) {
printf("请输入作业个数n(输入0结束):");
scanf("%d", &n);
if (n == 0) {
break;
}
printf("请输入每个作业的最后提交时间和逾期扣分(用空格分隔):\n");
for (i = 0; i < n; i++) {
scanf("%d%d", &t[i], &k[i]);
finish[i] = 0;
}
// 冒泡排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (t[j] > t[j+1]) {
temp = t[j];
t[j] = t[j+1];
t[j+1] = temp;
temp = k[j];
k[j] = k[j+1];
k[j+1] = temp;
}
}
}
// 依次计算完成作业的扣分情况
for (i = 0; i < n; i++) {
for (j = t[i] - 1; j >= 0; j--) {
if (finish[j] == 0) {
finish[j] = 1;
score += k[i];
break;
}
}
}
printf("小明扣除的总分数为:%d\n", score);
}
return 0;
}
```
注意,这里使用了一个finish数组来记录每天是否完成了作业,数组初始化为0,表示所有作业都未完成。在计算扣分情况时,从作业的最后提交时间往前遍历,找到第一个空闲的时间完成该作业,并将finish数组中对应的位置设为1表示已完成。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![dta](https://img-home.csdnimg.cn/images/20210720083646.png)