【ACM】华为-2012-校园招聘机试题

这篇博客介绍了华为2012年校园招聘机试的一道题目,涉及操作系统任务调度。任务分为系统任务(优先级<50)和用户任务(50<=优先级<=255),需要将任务按照类型和优先级排序。博主提供了一个解决方案,使用冒泡排序算法分别对系统任务和用户任务进行排序,并展示了代码实现。
摘要由CSDN通过智能技术生成

3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到
system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。

例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}    system_task[] = {0, 3, 1, 7, -1}    user_task[] = {4, 8, 2, 6, -1}

我的方法:

#include<stdio.h>
#include<stdlib.h>
void scheduler(int task[],int system_task[],int user_task[], int len);
void BubbleSort(int task[], int A[], int len);//冒泡排序
int main(void)
{
int *task = (int *)malloc(sizeof(int));
int key;
int i = 0;
int *system_task = (int *)malloc(sizeof(int));
int *user_task = (int *)malloc(sizeof(int));
printf("请输入任务优先级,按#结束\n");
while (scanf("%d", &key) == 1)
{
task[i] = key;
i++;
}
scheduler(task, system_task, user_task, i - 1);
}
void scheduler(int task[], int system_task[], int user_task[], int len)


{
int i;
int j = 0;
int t = 0;
for (i = 0; i <= len; i++)
{
if (task[i] < 50)
{
system_task[j] = i;
j++;
}
if (task[i] >= 50 && task[i] <= 255)
{
user_task[t] = i;
t++;
}
}
BubbleSort(task, system_task, j - 1);
BubbleSort(task, user_task, t - 1);
printf("system_task[]=:");
for (i = 0; i <= j - 1; i++)
printf("%d ", system_task[i]);
system_task[j] = -1;
printf("%d",system_task[j]);
printf("user_task[]=:");
for (i = 0; i <= t - 1; i++)
printf("%d ", user_task[i]);
user_task[j] = -1;
printf("%d", user_task[j]);
}
void BubbleSort(int task[],int A[], int len)
{
int i, j;
bool flag;
for (i = len; i >= 0; i--)
{
flag = false;
for (j = 0; j < i; j++)
{
if (task[A[j]]>task[A[j + 1]])
{
int temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
flag = true;
}
}
if (flag == false)
break;
}
}

这个问题中利用了冒泡排序,其实主要是排序问题。那么下面是我的结果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值