2016恒生电子秋招笔试两道算法题
2016恒生电子笔试两道算法题
//八皇后问题
//第一个问题:
//设我们要在n行n列的棋盘上放置n个皇后。现假设我们已经把前面的k-1个皇后放好了,我们要考虑如何放置第k个皇后(k小于等于n)。怎么办呢>
//我们的方法是把第k个皇后放到第k行的某一列,怎么确定它是哪一列呢?方法是从第一列到第n列,我们逐个去判断第k个皇后是否合适放到该位置.
//设它现在放的位置是第a[k]列,我们要求
//并且对j=1,...,k-1, 都要求a[k]!=a[j],同时|a[k]-k||!=|a[j]-j|。
//第二个问题:我们在找第k个皇后的合适位置时结果有这样三种:
//1:找到了合适的位置,并且k=n,这时候我们就找到了一组位置来放这些皇后。
//2:找到了合适的位置,但k小于n,这时候我们就要考虑如何放置第k+1个皇后。
//3:没找到合适的位置,这时候怎么办呢?
/*
int x[100];//x[i]表示第i行的数据放入的列号.
bool place(int k)//考察皇后k放置在x[k]列是否与前面行的数据发生冲突
{
int i;
for(i=1;i<k;i++)
if((x[k]==x[i]||abs(k-i)==abs(x[k]-x[i]))
//判断的标准是它不能与前面的每一行的数据放在同一列,并且不能构成对角线
return false;
return true;
}*/
/*void queue(int n)
{
int i,k;
for(i=1;i<=n;i++) //首先让所有皇后的初始位置都为第0列。
x[i]=0;
k=1;//从第一个皇后开始搜素
while(k>=1)
{
x[k]=x[k]+1; //在下一列放置第k个皇后
while(x[k]<n&&!place(k))//x[k]<=n表示第k个皇后还有位置可放, !place(k)表示当前位置不适合
x[k]=x[k]+1;//搜索下一列
if(x[k]<=n&&k==n)//得到一个输出
{
for(i=1;i<=n;i++)
printf("%d ",x[i]);
printf("\n");
//return;//若return则只求出其中一种解,若不return则可以继续回溯,求出全部的可能的解
}
else if(x[k]<=n&&k<n)
k=k+1;//放置下一个皇后
else
{
x[k]=0;//重置x[k],回溯
k=k-1;
}
}
}*/
//要点:当程序发现目前无法放置第k个皇后时,它会调整第k-1个皇后的位置,
//实现过程是;k=k-1;x[k]=x[k]+1;
//等它调整好k-1个皇后的位置时,要重新从1个位置开始重新放置第k个皇后。
//实现过程是;x[k]=0;x[k]=x[k]+1;
/* void main()
{
int n;
printf("输入皇后个数n:\n");
scanf("%d",&n);
queue(n);
}*/
package test;
import java.util.Random;
import java.util.TreeSet;
public class HenShengTest {
static int STARTNUM=2;//操作开始时间
static int ALLNUM = 5;//一共有多少天的价格数据
static int BoughtNum= 4;//交易次数,必须是2的倍数
static int [] a = new int[ALLNUM+1]; //股票输入的ALLNUM个数字的价格
static int [] x=new int [BoughtNum+1];//放置每次操作的所在天数,本题系数大于等于5就行
static TreeSet<Integer> setFin=new TreeSet<>();//放置相应操作次数的最优解,BoughtNum= 4时会放入两次操作和四次操作的最优解
static boolean place(int k)//考察k步操作放置在x[k]列是否与前面行的数据发生冲突
{
int i;
for(i=1;i<k;i++)
if(x[k]<=x[i])//第K部操作天数必须比前面的天数都要大
return false;
return true;
}
static void queue(int n)
{
TreeSet<Integer> set = new TreeSet<>();
int [] b=new int[n+1];//每次操作的最大天数,比如四次操作则放置{97,98,99,100}
int i,k;
for(i=1;i<=n;i++) //首先让所有操作的初始位置都为第STARTNUM-1天。
x[i]=STARTNUM-1;
for (int j = 1; j <= n; j++) {
b[j]=ALLNUM-n+j;
}
k=1;//从第一步操作开始搜素
while(k>=1)
{
x[k]=x[k]+1; //本次操作天数加一
while(x[k]<b[k]&&!place(k))//x[k]<b[k]表示第k个操作还有位置可放, !place(k)表示当前天数不适合
x[k]=x[k]+1;//搜索下一列
if(x[k]<=b[k]&&k==n)//得到一个输出
{
set.add(-a[x[4]]+a[x[3]]-a[x[2]]+a[x[1]]);
}
else if(x[k]<=b[k]&&k<n)
k=k+1;//放置下一个操作
else
{
x[k]=0;//重置x[k],回溯
k=k-1;
}
}
setFin.add(set.last());
}
/**
*放置操作次数的最优解进入 setFin
*/
public static void countAll(){
while (BoughtNum>0) {
queue(BoughtNum);
BoughtNum-=2;
}
}
public static void main(String[] args) {
for (int i = 1; i <= ALLNUM; i++) {
Random random =new Random();
a[i]=random.nextInt(100);
}
for (int i : a) {
System.out.print(i+" ");
}
countAll();
System.out.println();
/* System.out.println();
queue(BoughtNum);*/
if (setFin.last()<0) {
System.out.println("we can't buy anything............");
}
System.out.println(setFin.last());
}
}
2016恒生电子秋招笔试两道算法题相关推荐
- 搜狗2020秋招笔试的一道算法题
搜狗2020秋招的一道算法题 有A,B,C三种样品,凑齐三个样品各一个就可以领取一个奖品.任意两个样品可兑换另一种样品,如AA可兑换一个B或一个C,AB可兑换一个C.输入ABC,问最多可以领取多少奖品 ...
- BAT七年经验,却抵不过外企面试的两道算法题?
整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...
- BAT 七年经验,却抵不过外企面试的两道算法题?
整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...
- 【算法】两道算法题根据提供字母解决解码方法和城市的天际线天际线问题
算法目录 解码方法 Java解答参考: 天际线问题 Java解答参考: 大家好,我是小冷. 上一篇了解了项目相关的知识点 接下来看下两道算法题吧,用Java解答,可能更能激发一下大脑思考. 解码方法 ...
- 2014年阿里巴巴校园招聘两道算法题
昨天阿里巴巴校园招聘在线测试,总的来说算法题比较简单,至于前面的选择题不是本人的强项,个人感觉比较难.下面我们说说两道算法题: 第一题大意是有一个quary和text要求找出两者匹配最长的字符串的长度 ...
- 度小满笔试两道编程题2020/09/20
备战秋招面试 微信搜索公众号[TechGuide]关注更多新鲜好文和互联网大厂的笔经面经. 作者@TechGuide 点赞再看,养成习惯,您动动手指对原创作者意义非凡
- 笔试:深圳中博(2023.2.7)两道算法题 <未通过>
前言 笔试分两部分:一道填空题.一道编程题.语言自选,我选择的Java语言 答案如有错误,希望指出来,编程题答案仅供参考,笔试时间紧张,写的比较垃圾,自己笔试后看感觉是很鸡肋 填空题 阅读下列程序说明 ...
- 位运算的那些奇技淫巧 | 掌(装)握(逼)必备,妙解两道算法题
这里写目录标题 一.常(装)见(逼)的位操作 先看几个有意思的位操作: 1.判断奇数偶数 2.交换两个数字 3.找出没有重复的数字 4.m的n次方 5.判断一个数是不是二的指数 6.找出不大于N的最大 ...
- 关于有序二维矩阵查找和字符串替换的两道算法题
最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 : 1.对于一个二维矩阵,从左到右 从上到下 都是递增的,如何判断一个值是否在矩阵内部?(C实现 实现复杂度 O(n)) b ...
最新文章
- [DevOps] 认识一下
- leetcode算法题--学生分数的最小差值
- 【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi
- 监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”
- 国外机器人产业发展经验
- 抛物线交点式公式_二次函数顶点式、交点式、两根式概念解读
- I00021 有负数项的数列之和
- jni实现回调java函数
- 视觉三维重建中的关键技术及代码实现视频分享
- 使用ucinet和netdraw做文献计量的可视化分析+利用spss做系统聚类分析
- PHP将PPT文件转成图片
- 201771010102 常惠琢 《面向对象程序设计(java)》第十三周学习总结
- 鸿蒙系统pc版 硬件要求,原神全平台配置要求 原神配置需求一览
- Windows Azure 解决方案系列: Real World Windows Azure: 与微软杰出工程师, Sean Nolan的访谈...
- 用Java正则替换手机号中间4位数
- FreeBSD常用命令110条
- OpenGL4.0学习5.1--纹理(Targa图片贴图)
- [SRS+docker]实现直播服务器 2 SRS单机直播能力验证
- 反电动势的危害和简易保护措施
- frame-relay 学习笔记