zoukankan      html  css  js  c++  java
  • 名企笔试:字符串子串(网易2017春招笔试题)

    题目:


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


    输入描述:


    输入包括两行:

    第一行为整数n(1 ≤ n ≤ 50)

    第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。


    输出描述:


    输出一个整数,表示最少需要处理的时间


    输入例子1:


    5

    3072 3072 7168 3072 1024


    输出例子1:


    9216


    输出例子1:


    9216


    解题思路:


    看到题后,首先想这个应该属于分配问题!先将被分配的资源排好队,然后根据情况分配给两个CPU中的一个。想的简单的就是,排好队从小到大 先给A一个再给B一个,直至分完。但是这种分法只考虑到两任务之间存在差值,却没有考虑差值大小会不会影响下一次分配。所以我采取从大到小分配的方式,然后再每一次分配前还得先确定哪一个CPU的任务时长和是最小的就将下一个任务分配给谁!

    此题网上的其他答案不太靠谱哟!微笑


    代码实现:



    #include <stdio.h>
    int sumArray(int array[],int n)            //计算某个CPU上面的任务时间
    {
        int i;
        int sum=0;
        for(i=0;i<n;i++)
        {
            sum=sum+array[i];
        }
        return sum;
    }
    void BubbleSort(int a[],int length)        //对任务进行从大到小排序
    {  
        int i, j, temp;
    
        for(i = 0; i < length; ++i){
    
            for(j = i + 1; j < length; ++j){
    
                if(a[j] >a[i]){    //如果后一个元素da于前一个元素则交换
    
                    temp = a[i];
    
                    a[i] = a[j];
    
                    a[j] = temp;
    
                }
    
            }
        }
    }  
     
    int main()
    {
        int n;
        scanf("%d",&n);
        int number[n];
        int ACpu[n],BCpu[n];       //A B CPU
    
        int i;
        for(i=0;i<n;i++)           //代表每个CPU都可以接受任何任务 初值置零
        {
            ACpu[i]=0;  
            BCpu[i]=0;
        }
        for(i=0;i<n;i++)
            scanf("%d",&number[i]);
        BubbleSort(number,n);
        for(i=0;i<n;i++)
        {
            if(sumArray(ACpu,n)<=sumArray(BCpu,n))
            {
                ACpu[i]=number[i];
            }
            else
            {
                BCpu[i]=number[i];
            }
            
        }
        if(sumArray(ACpu,n)>sumArray(BCpu,n))    //最后统计哪组任务时长最长,则输出数值
            printf("%d
    ",sumArray(ACpu,n));
        else
            printf("%d
    ",sumArray(BCpu,n));
        return 0;
    }
    



  • 相关阅读:
    Codeforces Gym100502H:Clock Pictures(KMP算法)
    SPOJ MINSUB
    POJ 2796:Feel Good(单调栈)
    搭建(WSTMart)php电商环境时缺少fileinfo函数
    TP微信扫码支付
    tp3.2 支付宝app支付
    tp3.2 支付宝手机网站支付
    Thinkphp3.2+PHPQRCode 二维码生成示例
    百度UEditor粘贴或插入的表格不显示边框的解决办法
    PHP:导出数据到word(包含图片)
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232095.html
Copyright © 2011-2022 走看看