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

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

[复制链接]

1427

帖子

1615

威望

0

金豆

LV.6

Rank: 6Rank: 6

积分
1615
楼主
发表于 2010-5-7 18:17:31 | 显示全部楼层
本帖最后由 妖精的情人 于 2010-5-7 19:32 编辑

楼主的算法瞒先进滴,可用起来比较费时间吧 。
俺有一个方法,可以不用你们按计算器。
#include <iostream.h>
#include <vector>
void main()
{
float n,z;
cout<<"输入一个整数:";
cin>>n;
for(int i=1;i<n;i*=2)
{
  z=n/i;
  cout<<n<<"=\t"<<z<<'\t'<<"*"<<'\t'<<i<<endl;
}
cout<<'\n'<<"请按回车键!"<<endl;
getchar();
}
可以在生成的Debug文件包里面有个.exe,打开它就能运行了,我已经设定为手动关闭。
以上方法当然没有楼主的省钱,俺试过初始15,目标值396,楼主用260W  最优算法+++++***-*
俺的直接点-*-**+***   花费330W。不过省时间,哈哈
我将于茫茫妖精之中,寻找为数不多的CN,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

沙发
发表于 2010-5-7 18:46:10 | 显示全部楼层
本帖最后由 妖精的情人 于 2010-5-7 22:00 编辑

我只是想让按计算器的玩家更快的完成,当然前提是不计花费。
现在正在想怎么用别的方法也省钱。
我将于茫茫妖精之中,寻找为数不多的CN,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
发表于 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,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

5#
发表于 2010-5-9 11:21:32 | 显示全部楼层
以上下载是根据大众需求加入楼主的代码,形成一个循环,可以方便大家连续使用,绝不含病毒,如有病毒,请大家举报,谢谢,再次再感谢下楼主,没有楼主的精心设计,就没有大家的轻松和方便。
支持楼主。
版权所有。。 ...
disable 发表于 2010-5-8 23:23

能把你加入的程序复上来吗?我直接加进去就可以了。
我将于茫茫妖精之中,寻找为数不多的CN,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

6#
发表于 2010-5-9 11:23:57 | 显示全部楼层
我用笔算,每天做10多个号大概就1小时

用笔算 除2 的过程可以更准确的用+ —
天下第一笨 发表于 2010-5-9 11:19

你用笔算还不如用我那个除法呢。

除法.rar

43.29 KB, 下载次数: 877

我将于茫茫妖精之中,寻找为数不多的CN,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

7#
发表于 2010-5-10 20:33:01 | 显示全部楼层
帮楼主顶上来!
我将于茫茫妖精之中,寻找为数不多的CN,得之我幸,失之我命,如是而已!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

Powered by Discuz! X3.1

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

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