2012届华为校园招聘上机考试题目--成都

 

1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分  * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。

 函数接口   int cal_score(int score[], int judge_type[], int n) 

 

#include<stdio.h>   
#include<string.h>   
#include<iostream.h>   
#include<conio.h>   
#define N 5   
  
int cal_score(int score[], int judge_type[], int n)   
  
{  
    int expert=0;  
    int dazhong=0;  
    int zongfen=0;  
    int i;  
    int number=0;  
      
    for(i=0;i<N;i++)  
    {  
        if(judge_type[i]==1)  
        {  
            expert=expert+score[i];  
            number++;  
        }  
        else dazhong=dazhong+score[i];  
    }  
    if(number==N)  
    {  
        zongfen=(int)(expert/N);  
    }  
    else  
          
    {  
        expert=(int)(expert/number);  
        dazhong=(int)(dazhong/(N-number));  
        zongfen=int(0.6*expert+0.4*dazhong);  
          
    }  
    return zongfen;  
      
}  
int main()  
{  
    int score[N];  
    int judge_type[N];  
    int numberlast=0;  
    int i;  
    printf("please input the %d score:\n",N);  
    for(i=0;i<N;i++)  
        scanf("%d",&score[i]);  
    printf("please input the level(1:expert,2:dazhong)\n");  
    for(i=0;i<N;i++)  
        scanf("%d",&judge_type[i]);  
    numberlast=cal_score(score,judge_type,N);  
    printf("the last score is %d\n",numberlast);  
    return 0;  
}  


 

运行结果分析:

please input the 5 score:
90 80 87 89 91
please input the level(1:expert,2:dazhong)
1 2 1 1 1
the last score is 85

 

2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

      例如:input[] = {3, 6, 1, 9, 7}   output[] = {3, 7, 9, 6, 1};             input[] = {3, 6, 1, 9, 7, 8}    output[] = {1, 6, 8, 9, 7, 3}

#include<stdio.h>   
#include<string.h>   
#include<conio.h>   
  
  
  
void sort(int input[], int n, int output[])  
{  
    int i,j;  
    int k=1;  
    int temp;  
    int med;  
    for(i=0;i<n;i++)  
        for(j=0;j<n-i;j++)  
            if(input[j]>input[j+1])  
            {temp=input[j];input[j]=input[j+1];input[j+1]=temp;}  
            if(n%2!=0)  
            {  
                for(i=0;i<n;i++)  
                    printf("%2d",input[i]);  
                printf("\n");  
                med=(n-1)/2;  
                output[med]=input[n-1];  
                for(i=1;i<=med;i++)  
                {  
                    output[med-i]=input[n-1-k];  
                    output[med+i]=input[n-2-k];  
                    k=k+2;  
                      
                }  
            }  
            else  
            {  
                  
                for(i=0;i<n;i++)  
                    printf("%2d",input[i]);  
                printf("\n");  
                med=n/2;  
                output[med]=input[n-1];  
                for(i=1;i<=med-1;i++)  
                {  
                    output[med-i]=input[n-1-k];  
                    output[med+i]=input[n-2-k];  
                    k=k+2;    
                }  
                output[0]=input[0];               
            }     
            for(i=0;i<n;i++)  
                    printf("%2d",output[i]);  
                printf("\n");  
}  
  
  
int main()  
{  
    int a[6]={3,6,1,9,7,8};  
    int b[6]={0};  
    for(int i=0;i<6;i++)  
        printf("%2d",a[i]);  
    printf("\n");  
    sort(a,6,b);  
    return 0;  
}  


运行结果

3 6 1 9 7 8
1 3 6 7 8 9
1 6 8 9 7 3

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}

             函数接口    void scheduler(int task[], int n, int system_task[], int user_task[])

 

#include<stdio.h>   
#include<string.h>   
#include<malloc.h>   
#include<iostream.h>   
  
void scheduler1(int task[], int n, int system_task[], int user_task[])  
{  
    int i;  
    int j=0;  
    int *p,*pp,*p_user,*pp_user;  
    int index=0;  
    int count,count2;  
    int min=0;  
    int k=0;  
    p=(int*)malloc(sizeof(int)*n);  
    for(i=0;i<n;i++)  
        p[i]=0;  
    pp=(int*)malloc(sizeof(int)*n);  
    for(i=0;i<n;i++)  
        pp[i]=0;  
    p_user=(int*)malloc(sizeof(int)*n);  
    for(i=0;i<n;i++)  
        p_user[i]=0;  
    pp_user=(int*)malloc(sizeof(int)*n);  
    for(i=0;i<n;i++)  
        pp_user[i]=0;  
      
    for(i=0;i<n;i++)  
    {  
        if(task[i]<50)  
        {  
            {  
                system_task[j]=task[i];  
                pp[j]=i;  
                j++;  
            }  
            count=j;  
        }  
          
        else if(task[i]<=255)  
        {  
          
            {  
                user_task[k]=task[i];  
                pp_user[k]=i;  
                k++;  
            }  
            count2=k;  
        }  
        else task[i]=task[i];  
      
    }  
      
    for(i=0;i<count;i++)  
        printf("%3d",system_task[i]);  
    printf("\n");  
      
      
    for(i=0;i<count;i++)  
    {  
        min=system_task[0];  
        for(j=1;j<count;j++)  
        {  
              
            if(system_task[j]<min)  
            {  
                min=system_task[j];   
                p[i]=j;       
            }  
              
        }  
        system_task[p[i]]=51;  
    }  
      
    pp[count]=-1;  
    for(i=0;i<count;i++)  
        printf("%3d",pp[p[i]]);   
    printf("%3d\n",pp[count]);  
      
      
    /***********************************************************/  
      
    for(i=0;i<count2;i++)  
        printf("%4d",user_task[i]);  
    printf("\n");  
      
    for(i=0;i<count2;i++)  
    {  
        min=user_task[0];  
        for(j=1;j<count2;j++)  
        {  
              
            if(user_task[j]<min)  
            {  
                min=user_task[j];     
                p_user[i]=j;          
            }  
              
        }  
        user_task[p_user[i]]=256;  
    }  
      
    pp_user[count2]=-1;  
    for(i=0;i<count2;i++)  
        printf("%4d",pp_user[p_user[i]]);     
    printf("%3d\n",pp_user[count2]);  
      
      
}  
  
  
  
int main()  
{  
    int task[9]={0, 30, 155, 1, 80, 300,170, 40, 99};  
    int system_task[9]={0};  
    int user_task[9]={0};  
    scheduler1(task,9,system_task,user_task);  
    return 0;  
}  


 

运行结果:

 0 30  1 40
 0  3  1  7 -1
155  80 170  99
  4   8   2   6 -1

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值