很有意思的笔试题

该文章提出了一种策略,通过将任务按数据量从大到小排序,分配给两个CPU处理,以最小化总体处理时间。提供的C程序代码实现了这一方法,对输入的任务数据进行排序后,动态分配给两个CPU,确保时间效率最大化。
摘要由CSDN通过智能技术生成

很有意思的笔试题

一种双核 CPU 的两个核能够同时的处理任务,现在有 n 个已知数据量的任务需要交给CPU 处理,假设已知 CPU 的每个核 1 秒可以处理 1kb,每个核同时只能处理一项任务。n 个任务可以按照任意顺序放入 CPU 进行处理,现在需要设计一个方案让 CPU 处理完这批任务所需的时间最少,求这个最小的时间。

输入描述:
输入包括两行:
第一行为整数 n(1 ≤ n ≤ 50)
第二行为 n 个整数 length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为 1024 的倍数。
输出描述:
输出一个整数,表示最少需要处理的时间输入例子:
5
3072 3072 7168 3072 1024
输出例子:
9216

思路

这里提供一个很简单却有效的思路,首先将接收到的数值进行从大到小的一个排序,然后想象有两个cpu,将最大的两个数值分别给到两个CPU,之后比较两者的大小,小的一方继续按顺序加值,如5.4.3.2.1,cpu1=5,cpu2=4,4<5,则cpu2+3=7,7>5,则cpu1+2=7,依次比较加值,,直到所有值给完结束。此时两个cpu最大的一个值便是本次总任务完成的最短时间。

代码实现

解:

#include<stdio.h>
int main()
{
int n=5;
int i = 0;
int a[5] = {0};
printf("input data:\n");

for(i = 0;i < n;i++)
{
    scanf("%d",&a[i]);
}

for(i = 0;i < n;i++)
{
    for(int j = 0;j < n-1-i;j++)
    {
        if(a[j] < a[j+1])
        {
            int temp;
            temp = a[j];
            a[j] = a[j+1];
            a[j+1] = temp;
        }
    }
}

int cpu1, cpu2;

cpu1 = a[0];
cpu2 = a[1];
i = 2;
while(i < n)
{
	 if(cpu1 >= cpu2)
	 {
  		  cpu2 = cpu2 + a[i];
 		  i++;
	 }
	  else if(cpu1 < cpu2)
	 {
   		 cpu1 =cpu1 + a[i];
 		 i++;
	 }
   }

	if(cpu1 > cpu2)
	 {
  		  printf("%d\n",cpu1);
	 }
	 else
	 {
   		 printf("%d\n",cpu2);
	  }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值