各大计算机公司 笔试及面试 题目 - 华为(上机 1-3 答案)

#include <iostream>
#include <cassert>

using namespace std;

/************************************************************
*
*题一
*
*************************************************************/

 int cal_score(int score[], int judge_type[], int n)
 {
	 assert(NULL !=score && NULL!=judge_type && n!=0);

	 int sumPrf=0;
	 int sumPep=0;

	 int cntPrf=0;

	 for(int i=0;i<n;i++)
	 {
		 judge_type[i]==1?(sumPrf+=score[i],++cntPrf):(sumPep+=score[i]);
	 }

	 if(cntPrf==n)
		 return sumPrf/cntPrf;
	 else
		 return ((sumPrf/cntPrf)*0.6+(sumPep/(n-cntPrf))*0.4);
 }
  

/************************************************************
*
*题二
*
*************************************************************/
void sort(int input[], int n, int output[])
{
	assert(input !=NULL && n!=0 && output !=NULL);

	int temp=0;
	int poslft=n/2;
	int posrht=poslft;
	bool blft=false;
	 
	for(int i=n-1;i>=0;i--)
	{
		for(int j=0;j<i;j++)
		{
			if(input[j]>input[j+1])
			{
				temp=input[j];
				input[j]=input[j+1];
				input[j+1]=temp;
			}
		}

		if(blft)
		{
			output[--poslft]=input[i];
			blft=false;

		}
		else
		{
			output[posrht++]=input[i];
			blft=true;
		
		}
	}

}
 
/************************************************************
*
*题三
*
*************************************************************/
typedef struct entry
{
	int value;
	int index;
} taskEntry;

void scheduler(int task[], int n, int system_task[], int user_task[])
{
	assert(task !=NULL && n!=0 && system_task!=NULL && user_task !=NULL);

	taskEntry *tmptask = new taskEntry[n];
	for(int i=0;i<n;i++)
	{
		tmptask[i].value=task[i];
		tmptask[i].index=i;
	}

	taskEntry temp;
	int isys=0;
	int iusr=0;

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

		printf("task[%d]=%d\n",tmptask[i].index,tmptask[i].value);

		if(tmptask[i].value>255)
			break;

		tmptask[i].value<50?(system_task[isys++]=tmptask[i].index):(user_task[iusr++]=tmptask[i].index);
	
	}
	system_task[isys]=-1;
	user_task[iusr]=-1;

	delete []tmptask;
}



 int main()
 {
	//题一测试
	 {
		//int score[3]={12,13,50};  
		//int judge_type[3]={1,1,2};  
		//printf("%d\n",cal_score(score, judge_type, 3) );  
 
	 }

	// 题二测试
	 {

		 //int input1[] = {3, 6, 1, 9, 7};  
		 //int output1[5];  
		 //memset(output1,0,5*sizeof(int));  

		 //int input2[] = {3, 6, 1, 9, 7, 8}  ;   
		 //int output2[6];  
		 //memset(output2,0,6*sizeof(int));  
   //
		 //sort(input1, 5, output1);  
		 //sort(input2, 6, output2);  
		 //for(int k=0;k<5;k++)  
			//printf("%d   ",output1[k]);  
		 //printf("\n");
		 //for(int k=0;k<6;k++)  
			//printf("%d   ",output2[k]);  
		 //printf("\n");
 
	 }
	
	 // 题三测试
	 {

		int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} ;  
		int n=sizeof(task)/sizeof(int);  
		int *system_task=new int[n];   
		int *user_task=new int[n];   
   
		scheduler(task, n,  system_task, user_task);  
   
		for(int k=0;k<n;k++)  
	    {  
      
			if (system_task[k]!=-1)  
			{  
				 printf("%d   ",system_task[k]);  
			}  
			else  
			{  
				 printf("%d   ",system_task[k]);  
				 break;
			}  
      
	    }  
	   
		printf("\n");  
	   
		for(int k=0;k<n;k++)  
	    {  
			if (user_task[k]!=-1)  
			{  
				 printf("%d   ",user_task[k]);  
			}  
			else
			{  
				 printf("%d   ",system_task[k]);  
				 break;
			}  
	   }
		printf("\n");  

		delete []system_task;
		delete []user_task;
	 }

	system("pause");
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值