笔试总共2小时,三道题,时间挺充裕的,但是最后只做了一道,原因在于自己很浮躁,不审题,不仔细思考。没过的两道都是稍微改一下代码就能过,但是没过就是没过,要引以为戒

题目1:

小W有一个电子时钟用于显示时间,显示的格式为HH:MM:SS,HH,MM,SS分别表示时,分,秒。其中时的范围为[‘00’,‘01’…‘23’],分的范围为[‘00’,‘01’…‘59’],秒的范围为[‘00’,‘01’…‘59’]。

但是有一天小W发现钟表似乎坏了,显示了一个不可能存在的时间“98:23:00”,小W希望改变最少的数字,使得电子时钟显示的时间为一个真实存在的时间,譬如“98:23:00”通过修改第一个’9’为’1’,即可成为一个真实存在的时间“18:23:00”。修改的方法可能有很多,小W想知道,在满足改变最少的数字的前提下,符合条件的字典序最小的时间是多少。其中字典序比较为用“HHMMSS”的6位字符串进行比较。

思路:一开始觉得这个题很麻烦,后面觉得想了一下只有4位要判断的,就是时位上的两个和分位上的第一个以及秒位上的第一个,剩下怎么样都不会不合法

首先第一位,只能是0~2,如果出错,那么就改成0,因为要字典序最小

然后第二位,这里我栽了跟头,也是我这道题没过的原因,就是如果第一位上不是2的话,那么第二位0~9都合法,然而是第一位2的话,第二位就只能是0~3,关键来了,如果第二位不合法,要把第二位变成0吗?因为第一位是这样做的,所以会想当然的这样想,然而这样是错的,第二位不合法可以通过修改第一位使第二位合法,将第一位修改为0的话字典序更小

后面的两位,如果大于5则改成0

#include <iostream>
#include <string>
using namespace std ;
int main(){
int n ;
cin >> n ;
while(n--){
string time ;
cin >> time ;
for(int i=0;i<time.length();i++){
int num = time[i] - '0' ;
if(i==0&&num>2){
time[i] = '0' ;
}
if(i==1){
if(time[0]=='2'&&num>3){
time[0] = '0' ;
}
}
if(i==3&&num>5){
time[i] = '0' ;
}
if(i==6&&num>5){
time[i] = '0' ;
}
}
cout << time << endl ;
}
}

第二题:

小云正在参与开发一个即时聊天工具,他负责其中的会话列表部分。

会话列表为显示为一个从上到下的多行控件,其中每一行表示一个会话,每一个会话都可以以一个唯一正整数id表示。

当用户在一个会话中发送或接收信息时,如果该会话已经在会话列表中,则会从原来的位置移到列表的最上方;如果没有在会话列表中,则在会话列表最上方插入该会话。

小云在现在要做的工作是测试,他会先把会话列表清空等待接收信息。当接收完大量来自不同会话的信息后,就输出当前的会话列表,以检查其中是否有bug。

#include <iostream>
#include <vector>
using namespace std ;
int main(){
vector<long> list ;
int n, m, id ;
long reIdx ;
cin >> n ;
while(n--){
cin >> m ;
list.clear() ;
for(int i=0;i<m;i++){
cin >> id ;
if(list.empty()){
list.push_back(id) ;
}else{
reIdx = -1 ;
for(int j=0;j<list.size();j++){
if(list[j]==id){
reIdx = j ;
}
}
if(reIdx==-1){
list.push_back(id) ;
reIdx = list.size()-1;
}
for(int k=reIdx;k>=1;k--){
int temp = list[k] ;
list[k] = list[k-1] ;
list[k-1] = temp ;
}
}
}
for(int i=0;i<list.size()-1;i++){
cout << list[i] << " " ;
}
cout << list[list.size()-1] << endl ;
}
}

思路:这题过了,题也不难,唯一值得注意的就是我使用vector操作的,将队尾的元素塞进队首我是一个一个交换上去的,但是发现答案里有在塞id的时候判断有没有重复,如果有就删了加到队尾,最后利用reverse方法翻转vector,比我的好多了

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; int main()
{
int n,m,id;
vector<vector<int>> res;
cin >> n;
for(int i = 0;i < n;i++)
{
vector<int> per;
vector<int>::iterator it;
cin >> m;
//输入ID号码
for(int j = 0;j < m;j++)
{
cin >> id;
it = find(per.begin(),per.end(),id);
if(it != per.end())
{
per.erase(it);
}
per.push_back(id);
}
reverse(per.begin(),per.end());
res.push_back(per);
} for(int i = 0;i < res.size();i++)
{
for(int j = 0;j < res[i].size();j++)
{
if(j == res[i].size() - 1)
cout << res[i][j] <<endl;
else
cout << res[i][j] << " ";
}
}
return 0;
}

第三题:

字符迷阵是一种经典的智力游戏。玩家需要在给定的矩形的字符迷阵中寻找特定的单词。
在这题的规则中,单词是如下规定的:
1. 在字符迷阵中选取一个字符作为单词的开头;
2. 选取右方、下方、或右下45度方向作为单词的延伸方向;
3. 以开头的字符,以选定的延伸方向,把连续得到的若干字符拼接在一起,则称为一个单词。
以图1为例,如果要在其中寻找单词"WORD",则绿色框所标示的都是合法的方案,而红色框所标示的都是不合法的方案。
现在的问题是,给出一个字符迷阵,及一个要寻找的单词,问能在字符迷阵中找到多少个该单词的合法方案。注意合法方案是可以重叠的,如图1所示的字符迷阵,其中单词"WORD"的合法方案有4种
思路:这个题看起来很吓人,而且一开始我还写的是搜索,真是蠢啊,其实仔细一想就是每个位置开始判断符合条件的三种方式有没有合法的就行了,然而到最后我还是没A,原因是在输入矩阵的时候我以为是一个字一个字输入的,其实人家的输入是每行一个字符串。
然后这个错误我一直没找到,然后就跪了。以后要仔细看题啊。
#include <iostream>
#include <vector>
#include <string>
using namespace std ;
void findWord(vector<vector<char>> mtr,int x,int y,string target,int &cnt){
if(target[0]!=mtr[x][y]) return ;
int R , D ,RD ;
R = 1 ;
D = 1 ;
RD = 1 ;
for(int i=1;i<target.length();i++){
if((x+i)>=mtr.size()||mtr[x+i][y]!=target[i]){
D = 0;
}
if((y+i)>=mtr[0].size()||mtr[x][y+i]!=target[i]){
R = 0 ;
}
if((x+i)>=mtr.size()||(y+i)>=mtr[0].size()||mtr[x+i][y+i]!=target[i]){
RD = 0 ;
}
}
cnt = cnt + R + D + RD ;
}
int main(){
int t , n , m , ans;
string row ;
string target ;
cin >> t ;
while(t--){
cin >> m >> n ;
vector<vector<char>> mtr(m,vector<char>(n)) ;
ans = 0 ;
for(int i=0;i<m;i++){
cin >> row ;
for(int j=0;j<n;j++){
mtr[i][j] = row[j] ;
}
}
cin >> target ;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
findWord(mtr,i,j,target,ans) ;
}
}
cout << ans << endl ;
}
}

初始化2维vector

vector<vector<char>> mtr(m,vector<char>(n)) ;

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

  1. 刷题33. Search in Rotated Sorted Array

    一.题目说明 这个题目是33. Search in Rotated Sorted Array,说的是在一个"扭转"的有序列表中,查找一个元素,时间复杂度O(logn). 二.我的解 ...

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

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

  3. C#笔试题面试题锦集(全)总20篇

    前些时候找过一次工作,收集了很多不错的笔试题目.共享一下:) C#笔试题面试题锦集(20) 微软应试题目 (2010-01-15 21:32) C#笔试题面试题锦集(19) 雅虎C#题目 (2010- ...

  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. .net转PHP从零开始-配置visual studio 2013 PHP开发环境php for visual studio

    作为一个.net开发者,一直在visual studio这款强大的编辑器宠爱下,其他编辑器都不会用,也用着不熟练.最近这不是转php吗,使用php编辑器很不爽,觉得还是用visual studio舒服 ...

  2. PHP密码的六种加密方式

    1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str  --  原始字符串. raw_output  --  ...

  3. PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算

    输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验 ...

  4. redisCluster数据持久化

    Redis的数据回写机制 Redis的数据回写机制分同步和异步两种, 同步回写即SAVE命令,主进程直接向磁盘回写数据.在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的. 异步回写即BGSA ...

  5. [转帖] 一文看懂:"边缘计算"究竟是什么?为何潜力无限?

    一文看懂:"边缘计算"究竟是什么?为何潜力无限? 转载cnbeta   云计算 雾计算 边缘计算...   知名创投调研机构CB Insights撰文详述了边缘计算的发展和应用前景 ...

  6. MySQL查询where条件的顺序对查询效率的影响

    看到有资料说,where条件的顺序会影响查询的效率,根据的逻辑是: where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分的数据(而选择性不强的条件过滤后的结果集仍然很大), ...

  7. [国家集训队]middle

    [国家集训队]middle 题目 解法 开\(n\)颗线段树,将第\(i\)颗线段树中大于等于第\(i\)小的数权值赋为1,其他的则为-1,对于每个区间维护一个区间和,最大前缀和,最大后缀和. 然后二 ...

  8. 【大数据】SparkCore学习笔记

    第1章 RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象.代码中是一个抽象类,它代表一个不可变.可 ...

  9. MySQL的COUNT()函数理解

    MySQL的COUNT()函数理解 标签(空格分隔): MySQL5.7 COUNT()函数 探讨 写在前面的话 细心的朋友会在平时工作和学习中,可以看到MySQL的COUNT()函数有多种不同的参数 ...

  10. 解题:UOJ #46 玄学

    题面 二进制分组,修改把区间拆开丢在后面,合并的时候归并最后两块:查询在对应节点上二分答案 #include<cstdio> #include<cstring> #includ ...