4道题2小时,又是一道,不过这次的比较难,但第二道不应该的,又是审题不仔细导致没过

题目1:

给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A。

思路:就简单的字符串处理

#include <iostream>
#include <string>
using namespace std ;
int main(){
string str , ans ;
cin >> str ;
ans = "" ;
for(int i=0;i<str.length();i++){
int cnt = 1 ;
char temp = str[i] ;
while((i+1)<str.length()&&temp==str[i+1]){
cnt++ ;
i++ ;
}
ans = ans + to_string(cnt) + temp ;
}
cout << ans << endl ;
}

第二题:

在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向的直线连续D个数字的和里面最大的值

输入描述:
每个测试输入包含1个测试用例,第一行包括两个整数 N 和 D :
3 <= N <= 100
1 <= D <= N
接下来有N行,每行N个数字d:
0 <= d <= 100
输出描述:
输出一个整数,表示找到的和的最大值
输入例子1:
4 2
87 98 79 61
10 27 95 70
20 64 73 29
71 65 15 0
输出例子1:
193

这道没过不应该了,自以为题目中的左上到右下和右上到左下是一个意思,然后就少算了一种情况,于是只能过80%的样例,最后有个疑问,既然0<=d<=100,为什么还要考虑负数。。

#include <iostream>
#include <algorithm>
using namespace std ;
int findMax(vector<vector<int>> map,int x,int y,int D){
int l , d , ld ,rd;
int lc, dc, ldc ,rdc ;
int m = 0 ;
l = d = ld = rd = 0 ;
lc = dc = ldc = rdc = 0 ;
for(int i=0;i<D;i++){
if(x+i<map.size()){
d += map[x+i][y] ;
dc++ ;
}
if(y+i<map[0].size()){
l += map[x][y+i] ;
lc++ ;
}
if(x+i<map.size()&&y+i<map[0].size()){
ld += map[x+i][y+i] ;
ldc++ ;
}
if(x+i<map.size()&&y-i>=0){
rd += map[x+i][y-i] ;
rdc++ ;
}
}
if(lc!=D) l = 0 ;
if(dc!=D) d = 0 ;
if(ldc!=D) ld = 0 ;
if(rdc!=D) rd = 0 ;
m = max(m,l) ;
m = max(m,d) ;
m = max(m,ld) ;
m = max(m,rd) ;
return m ;
}
int main(){
int n , d ;
cin >> n ;
cin >> d ;
vector<vector<int>> map(n,vector<int>(n)) ;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin >> map[i][j] ;
}
}
int ans = 0 ;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
ans = max(ans,findMax(map,i,j,d)) ;
}
}
cout << ans << endl ;
}

题目三:推箱子

大家一定玩过“推箱子”这个经典的游戏。具体规则就是在一个N*M的地图上,有1个玩家、1个箱子、1个目的地以及若干障碍,其余是空地。玩家可以往上下左右4个方向移动,但是不能移动出地图或者移动到障碍里去。如果往这个方向移动推到了箱子,箱子也会按这个方向移动一格,当然,箱子也不能被推出地图或推到障碍里。当箱子被推到目的地以后,游戏目标达成。现在告诉你游戏开始是初始的地图布局,请你求出玩家最少需要移动多少步才能够将游戏目标达成。

输入描述:
每个测试输入包含1个测试用例
第一行输入两个数字N,M表示地图的大小。其中0<N,M<=8。
接下来有N行,每行包含M个字符表示该行地图。其中 . 表示空地、X表示玩家、*表示箱子、#表示障碍、@表示目的地。
每个地图必定包含1个玩家、1个箱子、1个目的地。
输出描述:
输出一个数字表示玩家最少需要移动多少步才能将游戏目标达成。当无论如何达成不了的时候,输出-1。
输入例子1:
4 4
....
..*@
....
.X..
6 6
...#..
......
#*##..
..##.#
..X...
.@#...
输出例子1:
3
11

思路:老实说觉得挺难的,而且好久没有做广搜的题了,一开始想着人和箱子分两个阶段,人找到箱子之前和找到箱子之后,然而写的一团乱,反正没写出来,后面看了评论区大神的写法,用一个思维数组vis[x][y][wx][wy]记录状态人在x,y箱子在wx,wy时需要多少步

之后在中间判断人的移动有没有造成箱子的移动就行了。

#include <iostream>
#include <queue>
#include <string>
using namespace std ;
struct State{
int x , y , wx , wy ;
State(int x,int y,int wx,int wy){
this->x = x ;
this->y = y ;
this->wx = wx ;
this->wy = wy ;
}
};
int vis[10][10][10][10] ;
int map[10][10] ;
int ex, ey, x, y, wx, wy , m , n ;
int a[]={0,0,1,-1}, b[]={1,-1,0,0} ;
queue<State> q ;
int bfs(){
vis[x][y][wx][wy] = 1 ;
State s(x,y,wx,wy) ;
q.push(s) ;
while(!q.empty()){
State t = q.front() ;
q.pop() ;
if(t.wx==ex&&t.wy==ey) return vis[t.x][t.y][t.wx][t.wy]-1 ;
for(int i=0;i<4;i++){
int nx = t.x+a[i] ;
int ny = t.y+b[i] ;
if(nx<0||ny<0||map[nx][ny]=='#'||nx>=n||ny>=m) continue ;
if(nx==t.wx&&ny==t.wy){
int nwx = nx+a[i] ;
int nwy = ny+b[i] ;
if(nwx<0||nwy<0||map[nwx][nwy]=='#'||nwx>=n||nwy>=m) continue ;
if(vis[nx][ny][nwx][nwy]) continue ;
vis[nx][ny][nwx][nwy] = vis[t.x][t.y][t.wx][t.wy]+1 ;
State s(nx,ny,nwx,nwy) ;
q.push(s) ;
}else{
if(vis[nx][ny][t.wx][t.wy]) continue ;
vis[nx][ny][t.wx][t.wy] = vis[t.x][t.y][t.wx][t.wy]+1 ;
State s(nx,ny,t.wx,t.wy) ;
q.push(s) ;
}
}
}
return -1 ;
}
int main(){
cin >> n >> m ;
for(int i=0;i<n;i++){
string row ;
cin >> row ;
for(int j=0;j<m;j++){
map[i][j] = row[j] ;
if(row[j]=='X'){
x = i ;
y = j ;
}
if(row[j]=='*'){
wx = i ;
wy = j ;
}
if(row[j]=='@'){
ex = i ;
ey = j ;
}
}
}
cout << bfs() << endl ;
}

题目4:赛马

在一条无限长的跑道上,有N匹马在不同的位置上出发开始赛马。当开始赛马比赛后,所有的马开始以自己的速度一直匀速前进。每匹马的速度都不一样,且全部是同样的均匀随机分布。在比赛中当某匹马追上了前面的某匹马时,被追上的马就出局。 请问按以上的规则比赛无限长的时间后,赛道上剩余的马匹数量的数学期望是多少

输入描述:
每个测试输入包含1个测试用例
输入只有一行,一个正整数N
1 <= N <= 1000
输出描述:
输出一个浮点数,精确到小数点后四位数字,表示剩余马匹数量的数学期望
输入例子1:
1
2
输出例子1:
1.0000
1.5000

思路:算是数学题,然而在时间有限的情况下没想明白。之后看了评论区答案:速度最大的马无论在什么位置都可以不被淘汰,所以速度最大的马存活的概率是1,然后速度第二大的马只有在速度最大的马后面才能存活,只有在它前后两种情况,所以存活的概率是1/2,同理,速度第三大的马有三种排列情况(不考虑前面两匹马的排列),存活概率是1/3,依次类推,所以最后的情况就是1+1/2+1/3+......1/n。注意不是通过每种排列情况计算能存活下来的马的数量,而是根据每匹马能存活的概率计算。

#include <iostream>
#include <iomanip>
using namespace std ;
int main(){
int n ;
double ans = ;
cin >> n ;
for(int i=;i<=n;i++){
ans+=(1.0/i) ;
}
cout<<setiosflags(ios::fixed)<<setprecision()<<ans<<endl ; }

c++刷题(37/100)笔试题2的更多相关文章

  1. 第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

    #include <iostream> #include <stdlib.h> #include <pthread.h> using namespace std; ...

  2. 面试刷题37:微服务是什么?springcloud,springboot是什么?

    面试中被问到为什么要使用微服务架构?springcloud的核心组件有哪些? 拿我们国家的兵种来说,如何把战争这个单体架构微服务化,就是根据适用的场景,拆分出不同的兵种(微服务) 然后每个兵种之间通过 ...

  3. leetcode刷题-37解数独

    题目 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次.数字 1-9 在每一列只能出现一次.数字 1-9 在每一个以粗实线分隔的 3x ...

  4. C/C++笔试题(基础题)

    为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...

  5. 100 道 Linux 笔试题,能拿 80 分就算大神!

    本套笔试题共100题,每题1分,共100分.(参考答案在文章末尾) 1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统C. 跟踪管理系统信息和错 ...

  6. 推荐收藏:100道Linux笔试题,能拿90分以上的都去了BAT

    本套笔试题共100题,每题1分,共100分.(参考答案在文章末尾) 1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和 ...

  7. 华为2018软件岗笔试题之第一题python求解分享

    闲来无事,突然看到博客园首页上有人写了篇了华为2018软件岗笔试题解题思路和源代码分享.看了下题目,感觉第一题能做出来,就想着用刚刚学的python试着写一下,花费的时间有点长~~,看来又好长时间没练 ...

  8. 【第一期百题计划进行中,快来打卡学习】吃透java、细化到知识点的练习题及笔试题,助你轻松搞定java

    [快来免费打卡学习]参与方式 本期百题计划开始时间:2022-02-09,今日打卡题已在文中标红. 0.本文文末评论区打卡,需要登录才可以打卡以及查看其他人的打卡记录 1.以下练习题,请用对应的知识点 ...

  9. js作用域之常见笔试题,运行结果题

    笔试题中经常有运行结果题,而大多体型都是围绕作用域展开,下面总结了几种相关的题: 外层的变量函数内部可以找到,函数内部的变量(局部变量)外层找不到. function aaa() { var a = ...

  10. 阿里巴巴集团2016校园招聘-Python工程师笔试题(附加题+部分答案)

    前言 第一次网上笔试,被虐的很惨.一是不太习惯,最主要的是还是自己对Python的掌握,还不够熟练.下面是这次阿里笔试相关信息 笔试时间是,2015年8月23日,10:00——12:00 对于笔试题, ...

随机推荐

  1. Network Mapper 嗅探工具

    1. nmap (目标ip地址 xxx.xxx.xxx.xxx) - 例子:nmap xxx.xxx.xxx.xxx2. nmap自定义扫描 - 例子:nmap -p(端口号) xxx.xxx.xxx ...

  2. imagick用法!

    https://coderwall.com/p/9hj97w sudo apt-get install imagemagick sudo apt-get install php5-imagick su ...

  3. PAT甲题题解-1038. Recover the Smallest Number (30)-排序/贪心,自定义cmp函数的强大啊!!!

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789138.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  4. C#代码分析--阅读程序,回答问题

    阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...

  5. Oracle与SQLSERVER修改数据文件的路径

    1. SQLSERVER ALTER DATABASE CWBASEMSS modify file (name = cwbasemss_dat ,filename = 'c:\cwdata\mss\C ...

  6. 2013长春网赛 1006 hdu 4764 Stone(巴什博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4764 题意:Tang 和 Jiang 玩一个游戏,轮流写下一个数,Tang先手,第一次Tang只能写[ ...

  7. Python 实现数据库更新脚本的生成

    我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准备更新脚本,真是一不小心没记下来就会忘了改了哪里,哪里添加了 ...

  8. windows日志查看-非法关机判断方法

    日志文件,它记录着Windows系统及其各种服务运行的每个细节,对增强Windows的稳定和安全性,起着非常重要的作用.但许多用户不注意对它保护,一些“不速之客”很轻易就将日志文件清空,给系统带来严重 ...

  9. java学习三 小数默认为double

    前++,后++在独立运算时候 直接计算出值 当后加加和减减和其他代码在一行的时候先使用加加和减减之前的值, 如果不在同一行,后面的一行就会得到加加或减减后的值 &&是逻辑运算符,逻辑运 ...

  10. CentOS7下安装Scrapy

    更新yum[root@localhost ~]# yum -y update1安装gcc及扩展包[root@localhost ~]# yum install gcc libffi-devel pyt ...