開心的小明(華為入職前練習)
阿新 • • 發佈:2019-01-29
小明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說:“你的房間需要購買哪些物品,怎麼佈置,你說了算,只要不超過N元錢就行”。今天一早小明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的N元。
於是,他把每件物品規定了一個重要度,分為5等:用整數1~5表示,第5等最重要。他還從因特網上查到了每件物品的價格(都是整數元)。他希望在不超過N元(可以等於N元)的前提下,使每件物品的價格與重要度的乘積的總和最大。
設第j件物品的價格為v[j],重要度為w[j],共選中了k件物品,編號依次為j1,j2,……,jk,則所求的總和為:
v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中*為乘號)
請你幫助小明設計一個滿足要求的購物單。
函式:void GetResult(int*p,int& Get_Result)
輸入引數:int*p 指向二維陣列的首地址,該二維陣列第0行的兩個數分別表示:總錢數<30000,和希望購買物品的個數<25;該陣列從第1行到第m行(1<=j<=m)中給出了編號為j的物品的基本資料,每行有2個非負整數,表示該物品的價格(<=10000)和該物品的重要度(1~5)。<>
Get_Result表示不超過總錢數的物品的價格與重要度乘積的總和的最大值(<100000000)。<>
輸出:無
二維指標是不能操作這種二維陣列的,二維指標就是指標的指標,而這種情況應該用陣列指標,另外,由於二維自動陣列也是順序存放的,所以可以用一維指標傳遞二維陣列的地址,以下程式分別用陣列指標(fun()函式)和一維指標(fun2()函式)操作相同的操作: //--------------------------------------------------------------------------- #include <stdio.h> void fun(int (*p)[3]) /*或者void fun(int p[][3])*/ { p[0][2]=99978; } void fun2(int *p,int col) /*p指向二維陣列首元素的地址,col是二維數組的列數*/ { *(p+col*0+2)=99669;/*完成和fun()函式相同的操作,即將主函式中的a[0][2]元素設定為99669*/ } int main(void) { int a[2][3]={0}; fun(a); printf("%d\n",a[0][2]); fun2(&a[0][0],3); printf("%d",a[0][2]); return 0; } //---------------------------------------------------------------------------
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
/*
功能:
輸入引數:int*p 指向二維陣列的首地址,該二維陣列第0行的兩個數分別表示:總錢數<30000,和希望購買物品的個數<25;
該陣列從第1行到第m行(1<=j<=m)中給出了編號為j的物品的基本資料,每行有2個非負整數,
表示該物品的價格(<=10000)和該物品的重要度(1~5)。
GetResult表示不超過總錢數的物品的價格與重要度乘積的總和的最大值(<100000000)。
不需做入參檢查,測試用例可以保證~
例如:4000 8(第0行)
821 3 (第1行)
422 5
458 5
500 3
200 2
430 4
530 3
239 3
則表示 總錢數為4000,希望購買物品個數為8個,因此從第1行到第8行表示編號為j的物品的價格及物品的重要度。
返回值:無
溫馨提示:根據題意可知,該二維陣列只有兩列,且行數為第0行的第二個元素數值+1;入參p不能按照二維陣列的方法來取值,要將
二維的轉換成一維的哦~
*/
void GetResult(int*p,int& Get_Result)
{
int money=p[0],numMax=p[1],valueMax=0,temp,i,j;
int f[30000]={0},v[100],w[100];
for (i=2,j=1;i<2*numMax+1;i++,j++)
{
v[j]=p[i];
i++;
w[j]=p[i];
}
for(i=1;i<=numMax;i++)
{
for(j=money;j>=v[i];j--)
{
temp=f[j-v[i]]+v[i]*w[i];
if(temp>f[j])
f[j]=temp;
}
}
Get_Result=f[money];
}
int main()
{
int p[6][2]={{1000,5},{800,2},{400,5},{300,5},{400,3},{200,2}};
int get_result;
GetResult(&p[0][0],get_result);
cout<<get_result<<endl;
return 0;
}