楼主: 帛裂七弦
打印 上一主题 下一主题

[【其他】] 最省钱种树方法计算器(第三版,修正之前错误)

[复制链接]

1734

帖子

2347

威望

2424

金豆

LV.7

Rank: 7Rank: 7Rank: 7

积分
3409
71#
发表于 2010-5-8 00:34:48 | 只看该作者
我只是想让按计算器的玩家更快的完成,当然前提是不计花费。
现在正在想怎么用别的方法也省钱。
妖精的情人 发表于 2010-5-7 18:46
呵呵,如果程序功能只是如此的话,那够大家所用了,我和你一样也在想一种更加快捷的全面的解决方案,不过楼主的代码已经做的很完美的,值得学习的教材。。。再次顶下楼主。。。
回复 支持 反对

使用道具 举报

72#
发表于 2010-5-8 08:01:58 | 只看该作者
刚刚在用楼主的EXE种树,缺点就是算法时间太长了,不过倒是省钱,顶下楼主。
我将于茫茫妖精之中,寻找为数不多的CN,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

211

帖子

198

威望

26

金豆

LV.5

Rank: 5Rank: 5

积分
964
73#
发表于 2010-5-8 11:01:51 | 只看该作者
楼主说的好啊 我顶啊
ZCOM电信欢迎你的到来
回复 支持 反对

使用道具 举报

74#
发表于 2010-5-8 11:03:32 | 只看该作者
楼主说的好啊 我顶啊[jx02]
名もなき恋の歌
回复 支持 反对

使用道具 举报

75#
发表于 2010-5-8 12:34:52 | 只看该作者
玩剑侠的牛人不少啊
我现在种树 以5玄为主 3玄为辅 因为3玄太少
就是把目标值不停的除以2 不能整除的 就加1或减1 直到和随机数接近
开做一枝白色花
因为我要这样宣告
我们无罪
然后我们凋谢
回复 支持 反对

使用道具 举报

76#
发表于 2010-5-8 13:26:46 | 只看该作者
楼主确实高明
源代码的要西  我学习下
mingcuiliu@163.com
回复 支持 反对

使用道具 举报

455

帖子

445

威望

0

金豆

LV.3

Rank: 3Rank: 3

积分
445
77#
发表于 2010-5-8 13:34:29 | 只看该作者
1:1:5 我输入的介值
选择是痛苦的。。没有选择更痛苦!
回复 支持 反对

使用道具 举报

78#
发表于 2010-5-8 17:51:49 | 只看该作者
楼主的程序如下:
#include <vector>
#include <string>
#include <limits>
#include <iostream>
using namespace std;
struct Point
{
int m_nPoint;
int m_nValue;
string m_szoper;
public:
Point(int nPoint, int nValue, string szoper) : m_nPoint(nPoint), m_nValue(nValue), m_szoper(szoper){}
};
int main(int argc, char* argv[])
{
int nEnd;  // 结束值
int nStart;  // 起始值
int nCost_Add=6; // +2 价值量      可在=6那输入你+2的价值
int nCost_Del=6; // -2 价值量        可在=6那输入你-2的价值
int nCost_Mul=10; // *2 价值量     可在=10那输入你*2的价值   输入这三个之后就不用再输入三次价值量了
cout << "输入目标值: ";
cin >> nEnd;
cout << "输入起始值: ";
cin >> nStart;
//cout << "+2 价值量: ";
//cin >> nCost_Add;
//cout << "-2 价值量: ";
//cin >> nCost_Del;
//cout << "*2 价值量: ";
//cin >> nCost_Mul;
// 初始状态
vector<Point> vecOperate;
vecOperate.push_back(Point(nStart, 0, ""));
Point sOptimalSolution(nEnd, numeric_limits<int>::max(), ""); // 最优解
while (true)
{
  if (vecOperate.size() <= 0)
   break;
  
  Point sPoint = vecOperate[0];
  vecOperate.erase(vecOperate.begin());
  if (sPoint.m_nPoint < nStart ||
   sPoint.m_nValue >= sOptimalSolution.m_nValue ||
   sPoint.m_szoper.find("+-") != string::npos ||
   sPoint.m_szoper.find("-+") != string::npos)
   continue;
  
  if (sPoint.m_nPoint == nEnd)
  {
   sOptimalSolution = sPoint;
   continue;
  }
  vecOperate.push_back( Point(sPoint.m_nPoint + 2, sPoint.m_nValue + nCost_Add, sPoint.m_szoper + string("+")) );
  vecOperate.push_back( Point(sPoint.m_nPoint - 2, sPoint.m_nValue + nCost_Del, sPoint.m_szoper + string("-")) );
  vecOperate.push_back( Point(sPoint.m_nPoint * 2, sPoint.m_nValue + nCost_Mul, sPoint.m_szoper + string("*")) );
}
cout << "最优消耗:" << sOptimalSolution.m_nValue << endl;
cout << "最优算法:" << sOptimalSolution.m_szoper << endl;
getchar();
getchar();
printf("Hello World!\n");
return 0;
}


//在int nCost_Add 设定初始值,如上面的程序
//可在=6那输入你+2的价值
//可在=6那输入你-2的价值
//可在=10那输入你*2的价值   
//输入这三个之后就不用再输入三次价值量了,可省一定的时间。
我将于茫茫妖精之中,寻找为数不多的CN,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

132

帖子

141

威望

0

金豆

LV.2

Rank: 2

积分
141
QQ
79#
发表于 2010-5-8 18:02:30 | 只看该作者
俺的这个程序目前效率上还有很大问题,感兴趣的同学可以在这里参与讨论,看应该怎么做好。
http://topic.csdn.net/u/20100507 ... b05e99b5.html?62102
死生在手 变化由心 地步能埋 天不能煞
回复 支持 反对

使用道具 举报

1734

帖子

2347

威望

2424

金豆

LV.7

Rank: 7Rank: 7Rank: 7

积分
3409
80#
发表于 2010-5-8 19:57:56 | 只看该作者
楼主的程序如下:
#include
#include  
#include
#include
using namespace std;
struct Point
{
int m_nPoint;
int m_nValue;
string m_szoper;
public:
Point(int nPoint, int nValue, string szoper) : m_nP ...
妖精的情人 发表于 2010-5-8 17:51
这段代码调试成功了,楼主上次发的那段连主函数都找不到,让我看了个糊涂,这个清晰明了,不过还是有点不习惯结构体,习惯用类表示了,呵呵。计算效率不算太低,这种算法要求比较苛刻,需要参与过程和子过程,效率下降点也是很正常,个人观点,呵呵。楼主辛苦了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver| 剑侠情缘网络版  

Powered by Discuz! X3.1

Copyright © 2014 Kingsoft Corporation.All rights reserved. 金山软件 版权所有

快速回复 返回顶部 返回列表
论坛导航