2016年華爲機試練習題及答案

學識都 人氣:2.48W

華爲機試並不難,只要你基礎知識紮實,相信你可以順利通過考試的,下面跟本站小編一起來看看最新的華爲機試練習題吧!

2016年華爲機試練習題及答案

題目

描述:

題目描述

臨近開學了,小C纔想起來數學老師佈置了暑假作業。暑假作業是很多張試卷,每張試卷所需的時間和獲取的價值已知,請你幫他安排一下,用他僅剩的一點時間來做最有價值的作業。

接口說明

原型:

int GetMaxValue(int nPapers, int nRemain, int paper[][2], double* pMaxValue)

輸入參數:

int nPapers:試卷的數目(1≤Papers≤20)

int nRemain:表示剩餘的時間(1≤nRemain≤10000)

int paper[][2]:nPapers*2的數組,每一行的兩個元素依次爲做完這一份試卷所需的時間、做完這份試卷獲取的價值。如果剩餘時間不夠做完一份卷子,可根據剩餘時間獲得卷子的部分價值。

輸出參數:

double * pMaxValue:獲得的最大價值

返回值:

0:異常,1:成功

知識點:

工程環境請使用VS2005

代碼

/*---------------------------------------

* 日期:2015-06-30

* 作者:SJF0115

* 題目:Home+Work

* 來源:華爲上機

-----------------------------------------*/

#include "OJ.h"

#include

using namespace std;

/*

輸入: nPapers表示試卷的數目(1≤Papers≤20),nRemain表示剩餘的.時間(1≤nRemain≤10000),paper[][2]是一個Papers*2的數組,

每一行的兩個元素依次爲做完這一份試卷所需的時間、做完這份試卷的價值

輸出: *pMaxValue爲獲得的最大價值

返回:

0:異常

1:計算成功返回

*/

int GetMaxValue(int nPapers, int nRemain, int paper[][2], double* pMaxValue){

if(nPapers < 0 || nRemain < 0 || pMaxValue == NULL){

return -1;

}//if

// 計算性價比

double* cost = new double[nPapers+1];

for(int i = 0;i < nPapers;++i){

cost[i] = (double)paper[i][1] / paper[i][0];

}//for

//按性價比排序

for(int i = 0;i < nPapers-1;++i){

for(int j = 0;j < nPapers-i-1;++j){

if(cost[j] > cost[j+1]){

swap(cost[j],cost[j+1]);

swap(paper[j][0],paper[j+1][0]);

swap(paper[j][1],paper[j+1][1]);

}//if

}//for

}//for

// 計算最大價值

int index = 0;

int time,value;

*pMaxValue = 0;

while(nRemain > 0 && index < nPapers){

time = paper[index][0];

value = paper[index][1];

// 剩餘時間不足以做一份試卷,取得部分價值

if(time > nRemain){

*pMaxValue += (double)nRemain / time * value;

}//if

// 剩餘時間可以做一份完整的試卷

else{

nRemain -= time;

*pMaxValue += value;

}//else

++index;

}//while

/*for(int i = 0;i < nPapers;++i){

printf("時間:%d 價值:%d 性價比:%lfn",paper[i][0],paper[i][1],cost[i]);

}//for*/

return 0;

}