整体思路:关键是需要知道当前Steps数组中的全排列即可,而且需要不重复的全排列。即关键在于非递归的全排列实现即可~ 其实直接利用STL中的next_permutation算法的,这里我又自己实现了一遍该算法,当练练手了~

 #include <iostream>
#include <fstream>
#include <string>
#include <istream>
#include <algorithm> using namespace std; void Swap(int& a, int&b)
{
int tmp = a;
a = b;
b = tmp;
} void ReverseArr(int *arr, int nBegin, int nEnd)
{
while (nBegin < nEnd)
{
Swap(arr[nBegin],arr[nEnd]);
nBegin++;
nEnd--;
}
} int printArr(int *nCard, int nCountOfCard, int *nStep, int nCountOfStep)
{
// 将当前结果输出,返回最大值
int nValue = nCard[];
cout<<"Card["<<<<"]"<<"("<<nCard[]<<")+";
int nIndexOfCards = ;
for (int i = ; i!=nCountOfStep; i++)
{
// 取出等式中的结果
int nIndex = nStep[i];
nIndexOfCards += nIndex;
nValue += nCard[nIndexOfCards];
cout<<"Card["<<nIndexOfCards<<"]"<<"("<<nCard[nIndexOfCards]<<")"; if (i == nCountOfStep - )
{
cout<<" = "<<nValue;
}
} cout<<endl; cout<<"步骤为:";
for (int i=; i!= nCountOfStep; i++)
{
cout<<nStep[i]<<" ";
} cout<<endl;
return nValue;
} // nCard 记录每一张卡片代表的值
int GetTheMostValue(int *nCard, int nCountOfCard, int *nStep, int nCountOfSteps)
{
// 获取步骤数的全排列 然后根据每个步骤则可以得到最终的value 然后选其中最大的即可
sort(nStep,nStep+nCountOfSteps);
//
int nResult = ;
while()
{
int nValue = printArr(nCard,nCountOfCard,nStep,nCountOfSteps); if (nValue > nResult)
{
nResult = nValue;
} for (int i = nCountOfSteps - ; i >= ; i--)
{
bool bFlag = false;
int ii = i+;
if (nStep[i] < nStep[ii])
{
// 找到相邻的 升序了
for (int j = nCountOfSteps-; j >= ; j--)
{
if (nStep[j] > nStep[i])
{
Swap(nStep[j],nStep[i]);
// 然后从ii开始到尾部 进行逆序]
ReverseArr(nStep,ii,nCountOfSteps-);
// 设置标志位 跳出两层循环
bFlag = true;
break;
}
}
// 跳出外层循环
if (bFlag)
{
break;
}
}
else if (i == )
{
// 已经结束
return nResult;
}
}
}
} int main()
{
fstream file;
file.open("E:\\2.txt");
if (file.is_open(),ios::in)
{
int nCountOfCard;
int nCountOfStep;
string str;
// 读取卡片数量和步数的个数
file>>nCountOfCard>>nCountOfStep; int *cards = new int[nCountOfCard];
int *steps = new int[nCountOfStep]; for (int i = ; i!= nCountOfCard; i++)
{
file>>cards[i];
} for (int j = ; j!= nCountOfStep; j++)
{
file>>steps[j];
} //计算各个组合~
// 其实就是将步骤数进行全排列 然后将每种组合结果输出即可~~ 在此过程中进行比较
// 使用非递归的方法吧
int nMaxValue = GetTheMostValue(cards,nCountOfCard,steps,nCountOfStep);
cout<<"最大的结果为:"<<nMaxValue<<endl; delete[] steps;
delete[] cards;
}
file.close();
return ;
}

2014亚马逊在线笔试题目及解决方案(MMChess问题)的更多相关文章

  1. [2014亚马逊amazon] 在线笔试题 大于非负整数N的第一个回文数 Symmetric Number

    1.题目 如标题,求大于整数N(N>=0)的第一个回文数的字符串表示形式. 这个题目也是当时笔试第一次见到,花了一个小时才做出了.慢慢总结还是挺简单的. 2.分析 分析如下: (1)一位数N(9 ...

  2. 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计

    设计高可用的应用是架构师的一个重要目标,可是基于云计算平台设计高可用应用与基于传统平台的设计有很多不同.云计算在给架构师带来了很多新的设计挑战的时候,也给带来了很多新的设计理念和可用的服务.怎样在设计 ...

  3. 微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)

    开源软件中有大量专家构建的代码,大大节省了开发人员的时间和成本,热衷于开源的大厂们总是能够带给我们新的惊喜.2016年9月GitHub报告显示,GitHub已经有超过 520 万的用户和超 30 万的 ...

  4. 亚马逊与Twitter携手电子商务

    亚马逊(Amazon)与Twitter开展了合作,允许用户以Twitter消息的形式将喜欢的商品发送到购物篮中.这些高科技企业正在想办法把社交媒体和电子商务融为一体. 这一功能旨在将Twitter转变 ...

  5. 亚马逊CEO贝索斯致股东信:阐述公司未来计划

    亚马逊CEO 杰夫·贝索斯(Jeff Bezos)今天发布年度股东信, 详细描述了亚马逊的产品.服务和未来计划,当然,信中并没有任何的硬数据,比如说亚马逊Kindle的销量等等.但这封信也包括一些颇令 ...

  6. 亚马逊:PS4和Xbox One实在太火

    圣诞节刚刚结束,当实体零售商在抱怨坑爹的天气让自己节日生意变得冷清的同时,在线零售商们却依旧赚的盆满钵满. 亚马逊近日表示,今年节日期间的零售工作非常不错,新一代游戏机更是最大的亮点.据销售统计,在圣 ...

  7. 使用AWS亚马逊云搭建Gmail转发服务(一)

    title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...

  8. 程序员面试大揭秘——应聘微软、亚马逊、谷歌、苹果等IT公司你都要做什么准备?

    对于多数求职者而言,面试好似一个迷局.你去了,见了几个面试官,答了一堆问题,然后,或两手空空离开,或幸运地拿到录用通知. 你有没有想过: 面试结果是怎么得出的? 面试官会不会互相交流? 公司最看重哪些 ...

  9. HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)

    HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...

随机推荐

  1. 10月27日PHP加载类、设计模式(单例模式和工厂模式)、面向对象的六大原则

    加载类可以使用include.require.require_once三种中的任意一种,每个关键字都有两种方法,但是这种方法的缺点是需要加载多少个php文件,就要写多少个加载类的方法.一般也就需要加载 ...

  2. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

     1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题 ...

  3. 【09-04】java内部类学习笔记

    java中的内部类 静态内部类 成员内部类 方法内部类 匿名内部类 1.静态内部类 class Outer { private static String outer = "outer&qu ...

  4. 不要在控制台上使用 let/const

    考虑下面的这三句代码和对应的报错信息: 假设写这个代码的人一开始不知道 ES6 里新增的构造函数不能省略 new,于是第一行写错了.然后第二行尝试重新声明一次,结果又报错说重复声明了.那干脆不声明,直 ...

  5. [Python] 网络爬虫和正则表达式学习总结

    以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...

  6. table td 文字超出显示省略号

    .autocut {      width:250px;      overflow:hidden;      white-space:nowrap;      text-overflow:ellip ...

  7. 自写网站入门阶段之三:兼容大战与jq初探

    自上一次作小结至今已整整一个月,在忙乎了半个月的工作之后闲下来的一个下午我终于可以再次作这个阶段的小结了.首先庆幸的是在同学的推荐下我顺利的找到了工作并于月初3号正式上班,这一点非常感谢他,让我免去了 ...

  8. cookie 巩固

    设定cookie 过期时间: Cookie coke = new Cookie("name", "pattern"); coke.setMaxAge(60);/ ...

  9. Unity3D 摄像机的Transform通过摇杆输出的方向

    要解决的问题是:摄像机的方向不固定,当摇杆向前(0,1)推时,主角要往摄像机的朝向(忽略Y方向)走,当摇杆往右(1,0)推的时,主角朝摄像机的右方向 /// <summary> /// 摄 ...

  10. appium for mobile web 之使用 ChromeDriver

    之前研究了一段时间的appium for native app 相应的总结如下:                                            appium测试环境搭建 :ht ...