题目链接

https://www.nowcoder.com/profile/8575360/test/8248155/95827

第四题

给定随机数组a[N](可能包含重复数字),要求对它进行排序。其中排序操作只有一种:将任意一个元素移动到数组末尾。问:最少进行几次操作才能完成任务。

这是一道贪心问题
对于数组中的第i个元素,如果它后面有比它小的元素,这就说明第i个元素理应被移动到末尾去。
另外,应该优先移动较小的元素,这样才能够保证较小元素最后排在最前面。

实际上,这个问题没这么复杂。
用一个备份数组b,把a中元素放到b中,对b数组进行排序。从第一个排好序的元素开始,即最小的元素开始与没排好序数组元素比较,检查有多少个已经是从最小到大好序的,位置可以不连续,但是大的元素必须在小的元素后面,统计出一共有 count个,这些元素是不需要移动的元素,一共有 n 个元素,所以需要移动 n - count 次

#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int N;
int a[1000];
bool has(int x){for (int i = x + 1; i < N; i++){if (a[i] < a[x])return true;}return false;
}
int find(){int ans = N;for (int i = 0; i < N; i++){if (has(i)){if (a[ans]>a[i])ans = i;}}return ans;
}
void op(int x){int t = a[x];for (int i = x; i < N - 1; i++)a[i] = a[i + 1];a[N - 1] = t;
}
int main(){//freopen("in.txt", "r", stdin);cin >> N;for (int i = 0; i < N; i++){ cin >> a[i]; }a[N] = 0xfffffff;int ans = 0;while (true){int pos = find();if (pos == N)break;op(pos);ans++;}cout << ans << endl;return 0;
}

第五题

0~N-1共N个数字有N!种排列方式,对于每一个排列,可以用大于号、小于号将他们连起来,例如:
1<2<4>3<6>5
现在的问题是,只允许用K个小于号把排列连起来,问在这N!种排列中有多少种排列满足小于号的个数不超过K.

这个问题是一道动态规划,f(n,k)表示0~n之间用k个小于号的排列个数,那么,考虑f(n,k)的计算,f(n,k)肯定来源于f(n-1,k)。
对于新来的数字n,考虑将它安排在什么位置:

  • 安排在开头,只需要添加一个大于号
    f(n,k)=f(n-1,k)
  • 安排在结尾,只需要添加一个小于号
    f(n,k)=f(n-1,k-1)
  • 安排在某个小于号上,a<b变为a<n>b,只需要添加一个大于号
    f(n,k)=f(n-1,k)*k
    乘以k表示有k个小于号可以选择来进行替换
  • 安排在某个大于号上,a>b变为a<n>b只需要添加一个小于号
    f(n,k)=f(n-1,k-1)*(n-k-1)
    从0到n-1一共n-2个符号,有k-1个小于号,所以一共有(n-2)-(k-1)=n-k-1个大于号可供选择

这么简单的动态规划我竟然没想到,真是生锈了。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
int n, k;
int a[1007][1007];
int main(){//freopen("in.txt", "r", stdin); cin >> n >> k;memset(a, 0, sizeof(a));for (int i = 0; i < n; i++)a[i][0] = 1;for (int i = 1; i < n; i++){for (int j = 1; j <= i; j++){a[i][j] = a[i - 1][j - 1]//放在末尾,需要占用一个小于号+ a[i - 1][j]//放在开头,只要添加一个大于号+ a[i - 1][j] * j//放在小于号上,相当于添加一个大于号+ a[i - 1][j-1] * (i - j);//放在大于号上,相当于添加一个小于号a[i][j] %= 2017;}} cout << a[n-1][k] << endl;return 0;
}

转载于:https://www.cnblogs.com/weiyinfu/p/6843642.html

百度2017春招笔试相关推荐

  1. 题解-百度2017春招笔试真题编程题集合

    题目链接:https://www.nowcoder.com/test/4998655/summary 一共五题,从第五题开始写,难度由难到易 ----------------------------- ...

  2. 网易2017春招笔试真题编程题集合

    网易2017春招笔试真题编程题集合 题目来源:牛客网 https://www.nowcoder.com/profile/7952866/test/7811777/83061 1.双核处理 题目描述 一 ...

  3. 网易2017春招笔试真题编程题集合(2)——赶去公司

    时间限制:1秒 空间限制:32768K 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X, ...

  4. 网易2017春招笔试真题编程题集合(5)——魔力手环

    小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使用魔力的时候就会发生一种奇特的变化:每个数字会变成自己跟后面一个数字的和(最后一个数字的后面一个数字是第一个),一旦某个位置 ...

  5. 3、寻找三角形--百度2017春招

    [编程题] 寻找三角形 时间限制:1秒 空间限制:32768K 三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用'R', 'G', 'B'表示.  现在要找出三个点,并 ...

  6. 网易2017春招笔试——工作安排

    工作安排 题目 现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作).现在需要进行工作安排,每位 ...

  7. 网易2017春招笔试——集合

    集合 题目 小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性. 小易的老师给了小易这样一个集合: S = { p/q | w ≤ p ≤ x, y ≤ q ≤ ...

  8. 网易2017春招笔试——赶去公司

    赶去公司 题目 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0 ...

  9. 蘑菇街2017春招笔试

    现在有一个n个证书的序列,交换两个相邻的数的位置直到整个序列按照升序排列, 那么将整个序列排好需要交换多少次? 例如 1,2,3,5,4 只需要交换一次即可. 第一行输入一个正整数n(n<100 ...

最新文章

  1. 【青少年编程】全国青少年软件编程等级考试大纲与说明(Scratch)
  2. UVA11646 Athletics Track(计算几何、弧长公式)
  3. 因脉脉上的匿名消息,拼多多员工被开除了!
  4. jQuery的延迟对象
  5. 一个菜鸟从高一到大二的作品整理
  6. 从零开始写一个武侠冒险游戏-6-用GPU提升性能(1)
  7. 查看虚拟机cpu型号_虚拟机管理器(Virtual Machine Manager)简介 | Linux 中国
  8. HDU1753: 大明A+B
  9. 【电路补习笔记】10、电感式开关电源(BUCK 降压电路)
  10. POJ1321(KB1-A 简单搜索)
  11. java源程序编译型_Java语言的源程序不是编译型的,而是编译解释型的
  12. React项目build之后资源文件路径不正确或打开空白页的问题及简易解决方法
  13. ​Java面向对象的概念整理
  14. 怎么不能锁门_学校规定宿舍不能锁门,声称方便检查卫生,你认为这合理吗?...
  15. 如何在iOS 9中启用“应用程序传输安全性”的情况下加载HTTP URL? [重复]
  16. oracle 循环块,Oracle语句块PL/SQL循环判断
  17. erlang中遍历取出某个位置的最大值
  18. unity3d 破解
  19. python怎么撤销_python撤销操作
  20. [Noi online-j]T1 切蛋糕

热门文章

  1. [原]部署kubernetes dashboard(二)
  2. Random()种子数
  3. python中的多进程与多线程(一)
  4. 关于对象的思考(二)
  5. iOS 评论APP撰写评论
  6. 通过JCONSOLE监控TOMCAT的JVM使用情况
  7. SQL Server 日期转换格式
  8. 【Python笔记】pygame 游戏框架
  9. 设计模式再学习之单例模式
  10. 剑指offer01--二叉树的最近公共祖先