整体思路:关键是需要知道当前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. 在github上搭建hexo博客

    准备工作 安装git 系统是win10家庭版,采用git v1.9.5版本,比较简单,一路next直到finsh完成安装. 安装node.js hexo是基于node.js驱动的一款快速.简单且功能强 ...

  2. group by 查询分组后 组的条数

    比如select gid from table group by gid 查询时使用下面的方法查询条数 select count(distinct gid) from table 使用select c ...

  3. 电商总结(五)移动M站建设

    最近在一直在搞M站,也就是移动web站点.由于是第一次,也遇到了很多问题,所以把最近了解到的东西总结总结.聊一聊什么是移动M站,它有啥作用和优势. 也有人会问,M站和APP有什么不同? 1. APP ...

  4. 将javascript函数写在Html标签里

    有些时候不想把函数写在script标签里了,想直接在html标签里直接加上js代码,可以这样写: <body onload="javascript:{window.location.h ...

  5. @SuppressWarnings注解的用法

    一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的"感叹号"就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @S ...

  6. [Search Engine] 搜索引擎技术之倒排索引

    倒排索引是搜索引擎中最为核心的一项技术之一,可以说是搜索引擎的基石.可以说正是有了倒排索引技术,搜索引擎才能有效率的进行数据库查找.删除等操作. 1. 倒排索引的思想 倒排索引源于实际应用中需要根据属 ...

  7. soj杂题

    unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件 ...

  8. Linux进程间通信(七):消息队列 msgget()、msgsend()、msgrcv()、msgctl()

    下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信 -- 使用命名管道 一.什么是消息队列 消息队列提 ...

  9. eclipse导入重复的项目、eclipse设置默认注释

  10. 转:mysql根据经纬度查找排序

    一.MySql不使用空间函数,简单版 1.粗算,根据场景得到一个range,计算经纬度,得到的是一个矩形区域(A),不精确,但是已经有范围这个雏形了,最容易实现的方式之一. 1 2 3 4 5 6 w ...