开心的小明(华为入职前练习)
来源:互联网 发布:dota2有mac版吗 编辑:程序博客网 时间:2024/06/02 12:25
小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过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)。<>
输出:无
以下关于二维数组传参的内容引自:http://zhidao.baidu.com/link?url=x-4caFzqquBC1GcgbueEPxCWonwmKFlmE_VuG91A8FXUqx-xxpp5kR-pDWOSismF1WB2q0PZnCDLMPyMBgD9Lq
二维指针是不能操作这种二维数组的,二维指针就是指针的指针,而这种情况应该用数组指针,另外,由于二维自动数组也是顺序存放的,所以可以用一维指针传递二维数组的地址,以下程序分别用数组指针(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;}
- 开心的小明(华为入职前练习)
- 华为招聘练习--小明的筷子
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- 开心的小明
- oracle中的NVL,NVL2,NULLIF,COALESCE几个通用函数
- 块设备驱动3--sd卡驱动2(linux-3.2.36的host.h分析)
- seed-dvs6467 encodedecode实例 采集的图像质量很差,只有隔行显示,而且每帧图像不断的往下移动?
- 取得手机屏幕大小DisplayMetrics的应用
- MYSQL命令大全
- 开心的小明(华为入职前练习)
- linux下面tomcat域名配置
- Kernel中Hid和Bnep的初始化
- DBA应该掌握的SQL语句
- linux screen 命令详解
- 2013资料整理-IOS音频格式AMR和WAV互转
- 一个操作系统的实现笔记
- 螺旋藻2
- Java Swing 中如何处理事件 几种常用的事件处理方法, 很经典