有这样一个问题,挺麻烦的

DoH_Wang 2008-11-17 01:12:39
鱼缸里有14条大大小小价格不一的鱼,价格如下:
红鱼,6;
黄鱼,8;
黒鱼,5;
白鱼,7;
红黄鱼,12;
黒白鱼,10;
绿鱼,9;
蓝鱼,14;
黄褐鱼,9;
淡红鱼,7;
谈白鱼,6;
紫鱼,12;
黒尾红鱼,14;
红尾蓝鱼,15;
我手上揣了36元,想用这些钱全部买鱼,我想知道总共有多少种买法?
我也不知道能不能还价,但可以肯定的是还价不会超过2元.
卖家的鱼可能在我掏钱去买时已少了几条被卖出了.
现在谁能帮我用计算机设计一程序来解决目前的问题.

...全文
214 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lp3331 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 DoH_Wang 的回复:]
基本实现了要求的功能,但我不知道打印出来的数字没有鱼的信息有什么意义?
既然定义了数组,就已决定了大小,我还需要再定义一个const变量来描述其大小?
如果价格不是整数元,而是带有角分怎么办?
如果我要获取数据,而非打印数据,数据结构怎么设计?
如果所给的数据元素个数超过14个,可能比较多,如100个,效率上如何提高呢,空间存储如何优化呢?

[/Quote]
1. cout << fishID << fishPrice[fishID] << "\t"; //fishID 就是鱼的信息
2. 如果用数组的话,我觉得定义个变量描述其大小还是有必要的;
当然可以用 vector size()
3. vector<float>
4. 获取数据? 可以在打印的时候保存起来
5. 效率确实不高啊,而且递归中要一次又一次的 copy 整个vector

feng4206yu 2008-11-18
  • 打赏
  • 举报
回复
我不敢妄加揣摩..
P_ghost 2008-11-18
  • 打赏
  • 举报
回复
对于实际问题的模拟,写个实际问题的流程图出来,那么一切就在你眼前了。
帅得不敢出门 2008-11-18
  • 打赏
  • 举报
回复
up
DoH_Wang 2008-11-18
  • 打赏
  • 举报
回复
基本实现了要求的功能,但我不知道打印出来的数字没有鱼的信息有什么意义?
既然定义了数组,就已决定了大小,我还需要再定义一个const变量来描述其大小?
如果价格不是整数元,而是带有角分怎么办?
如果我要获取数据,而非打印数据,数据结构怎么设计?
如果所给的数据元素个数超过14个,可能比较多,如100个,效率上如何提高呢,空间存储如何优化呢?
太乙 2008-11-17
  • 打赏
  • 举报
回复
upup~~~~解决了??
dzc8866 2008-11-17
  • 打赏
  • 举报
回复
UP
lp3331 2008-11-17
  • 打赏
  • 举报
回复

#include <iostream>
#include <vector>

using namespace std;

const int totalMoney = 36 + 2; //可以还价2元,可用36、37或38元

const int nFish = 14;
int fishPrice[] = { 6,8,5,7,12,10,9,14,9,7,6,12,14,15 };

void PrintBoughtFish( const vector<int> &boughtFish )
{
static int count = 1;
int total = 0;
vector<int>::const_iterator iter;

cout<<count++<<".\t";

for ( iter = boughtFish.begin(); iter != boughtFish.end(); ++iter )
{
int fishID = *iter;
cout << fishPrice[fishID] << "\t";
total += fishPrice[fishID];
}
cout<<"\t"<<total<< endl;
}

void BuyFish( vector<int> boughtFish, int fishId, int money )
{
if ( money >= 0 && money <= 2 ) //钱刚好用完
{
PrintBoughtFish( boughtFish );
return;
}
else if ( fishId > nFish || money < 0 )
return;

//不买fishId这条鱼
BuyFish( boughtFish, fishId + 1, money );

//买fishId这条鱼
boughtFish.push_back(fishId);
BuyFish( boughtFish, fishId + 1, money - fishPrice[fishId]);

}

int main()
{
int startFishId = 0;
vector<int> boughtFish;

BuyFish( boughtFish, startFishId, totalMoney );

char c;
cin>>c;

return 0;
}


结果有315种

如果 “卖家的鱼可能在我掏钱去买时已少了几条被卖出了”
只要改一下
nFish 和fishPrice 就可以了
xianyuxiaoqiang 2008-11-17
  • 打赏
  • 举报
回复
穷举。。。
zhyinty 2008-11-17
  • 打赏
  • 举报
回复
不懂,帮忙顶

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧