2014亚马逊在线笔试题目及解决方案(MMChess问题)


整体思路:关键是需要知道当前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问题)的更多相关文章
- [2014亚马逊amazon] 在线笔试题 大于非负整数N的第一个回文数 Symmetric Number
1.题目 如标题,求大于整数N(N>=0)的第一个回文数的字符串表示形式. 这个题目也是当时笔试第一次见到,花了一个小时才做出了.慢慢总结还是挺简单的. 2.分析 分析如下: (1)一位数N(9 ...
- 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计
设计高可用的应用是架构师的一个重要目标,可是基于云计算平台设计高可用应用与基于传统平台的设计有很多不同.云计算在给架构师带来了很多新的设计挑战的时候,也给带来了很多新的设计理念和可用的服务.怎样在设计 ...
- 微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)
开源软件中有大量专家构建的代码,大大节省了开发人员的时间和成本,热衷于开源的大厂们总是能够带给我们新的惊喜.2016年9月GitHub报告显示,GitHub已经有超过 520 万的用户和超 30 万的 ...
- 亚马逊与Twitter携手电子商务
亚马逊(Amazon)与Twitter开展了合作,允许用户以Twitter消息的形式将喜欢的商品发送到购物篮中.这些高科技企业正在想办法把社交媒体和电子商务融为一体. 这一功能旨在将Twitter转变 ...
- 亚马逊CEO贝索斯致股东信:阐述公司未来计划
亚马逊CEO 杰夫·贝索斯(Jeff Bezos)今天发布年度股东信, 详细描述了亚马逊的产品.服务和未来计划,当然,信中并没有任何的硬数据,比如说亚马逊Kindle的销量等等.但这封信也包括一些颇令 ...
- 亚马逊:PS4和Xbox One实在太火
圣诞节刚刚结束,当实体零售商在抱怨坑爹的天气让自己节日生意变得冷清的同时,在线零售商们却依旧赚的盆满钵满. 亚马逊近日表示,今年节日期间的零售工作非常不错,新一代游戏机更是最大的亮点.据销售统计,在圣 ...
- 使用AWS亚马逊云搭建Gmail转发服务(一)
title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...
- 程序员面试大揭秘——应聘微软、亚马逊、谷歌、苹果等IT公司你都要做什么准备?
对于多数求职者而言,面试好似一个迷局.你去了,见了几个面试官,答了一堆问题,然后,或两手空空离开,或幸运地拿到录用通知. 你有没有想过: 面试结果是怎么得出的? 面试官会不会互相交流? 公司最看重哪些 ...
- HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)
HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...
随机推荐
- PHP利用P3P实现跨域
本文转自:点这里 有别于JS跨域.IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域. P3P是什么 P3P(Platform for Privacy Preferences)是W3C公布的 ...
- 大熊君{{bb}}移动开发之旅(第一季)
一,开篇概述 Hi,大家好!大熊君又和大家见面了,从这篇文章开始我要和大家聊聊移动开发的话题,这部分文章共8季,分别从不同角度来讲解什么是移动开发?移动开发涉及到什么方面的技术点以及移动开发中的常见问 ...
- 【总结1】PhpStorm配置XDebug(远程)调试PHP
配置PhpStorm调试PHP 第一步:配置 XDebug 下载安装XDebug到本地环境,打开php.ini,参考配置如下: [XDebug] zend_extension = "D:\P ...
- Shell入门教程:Shell函数详解
Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1.函数定义 ...
- 2.2WebApi路由在Action上
这篇文章描述 ASP.NET Web API 如何将 HTTP 请求路由到特定的操作在控制器上. 有关路由的高级别概述,请参见ASP.NET Web API 的路由. 本文着眼于路由进程的详细信息.如 ...
- BZOJ3436——小K的农场
1.题意:大概是给一些制约限制,问是否存在合法解 2.分析:我们来观察这三个限制 农场a比农场b至少多种植了c个单位的作物 可以变成b 比 a至多多种了-c 农场a比农场b至多多种植了c个单位 ...
- 记录一下两个比较常用的md5加密算法
第一个,计算字符串的md5值 public static String getMD5(String s){ String newString = null; byte[] inputByteArray ...
- BeautifulSoup的选择器
用BeautifulSoup查找指定标签(元素)的时候,有几种方法: soup=BeautifulSoup(html) 1.soup.find_all(tagName),返回一个指定Tag元素的列表 ...
- sqlserver中分区函数 partition by的用法
partition by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录, partition by ...
- Spring Security控制权限
Spring Security控制权限 1,配置过滤器 为了在项目中使用Spring Security控制权限,首先要在web.xml中配置过滤器,这样我们就可以控制对这个项目的每个请求了. < ...