C++笔试机考三道代码题——包括输入输出

2023-10-27

一、在相邻差为 1 的整数数组中进行有效搜索

时间限制: 1000MS
内存限制: 65536KB

题目描述:

给定一个由n 个整数组成的数组。每个数组元素是通过将 +1 或 -1 添加到前一个元素获得的,即任意两个连续元素之间的绝对差为 1。

任务是搜索具有最少比较次数的元素索引(小于简单的逐元素搜索) . 如果元素多次出现,则打印最小的索引。如果元素不存在,则打印 -1。

例子:
输入描述
输入: arr[] = {5, 4, 5, 6, 5, 4, 3, 2} x = 4。
输入: arr[] = { 5, 4, 5, 6, 4, 3, 2, 3 } x = 9。

输出描述
输出: 1 //元素 x 第一次出现在 索引 1。
输出: -1 //元素 x 不存在于 arr[]

样例输入

5, 4, 5, 6, 5, 4, 3, 2
4

样例输出

1

AC代码:

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<unordered_map>
#include<set>
#include<map>
using namespace std;

int main()
{
	vector<int> a;//arr数组
	int num;//输入的数
	char c;//存入空格或回车,如果是回车则arr数组输入完毕,退出while循环
	while(scanf("%d",&num)!=EOF){
		a.push_back(num);
		if(c=getchar()=='\n')
      		break;
	}

	int len=a.size();
	int found=0;
	//int count=0;
	int to_search;//to_search为要找的数
	scanf("%d",&to_search);
	int i,next;//i为arr数组的index,next为i的下一个值
	for( i=0;i<len;i+=next){
		//++count;
		if(a[i]==to_search){
			found=1;
			break;
		}
		else{
			next=abs(a[i]-to_search);//因为任意两个连续元素之间的绝对差为 1,所以next的值
		}
	}
	if(found){
		printf("%d\n",i); 
	}
	else{
		printf("-1\n");
	}
	return 0;	
 }  

二、字符串匹配,其中一个字符串包含通配符

时间限制: 1000MS
内存限制: 65536KB

题目描述:

给定两个字符串,其中第一个字符串可能包含通配符,第二个字符串是普通字符串。编写一个函数,如果两个字符串匹配则返回 true。以下是第一个字符串中允许的通配符。

  • *–> 匹配任何字符或字符集的 0 个或多个实例。
  • ? --> 匹配任意一个字符。

如,“f* sh”匹配与“fish”匹配。并且字符串“fu?anm * ”与“fudanmicro”匹配(注意第一个字符串末尾的’* ')。但是“f *a”与“fish”不匹配,因为第二个字符串中不存在字符“a”。

输入描述
第一个字符串可能包含通配符,第二个字符串是普通字符串
输出描述
匹配输出yes,反之输出no

样例输入

fu?anm*
fudanmicro

样例输出

yes

下面代码虽然考试的时候AC了,但有缺陷,待修改,仅供参考,如果有修改建议,欢迎评论指出:

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<unordered_map>
#include<set>
#include<map>
using namespace std;

string s1,s2;
bool match(int s1loc,int s2loc){
	if(s1loc>=s1.size())
		return true;
	if(s1[s1loc]=='?' || s1[s1loc]==s2[s2loc] ){
		return match(s1loc+1,s2loc+1);
	}
	else if(s1[s1loc]=='*'){
		int flag=0;
		for(int i=s2loc;i<=s2.size();i++){
			flag+=match(s1loc+1,i);
		}
		return flag;
	}
	else
		return false;
}
int main()
{
	cin>>s1>>s2;
	if(match(0,0)){
		cout<<"yes\n";
	}
	else {
		cout<<"no\n";
	}
	return 0;	
 }  

三、找出所有零和的三元组

时间限制: 1000MS
内存限制: 65536KB
题目描述:
输入int数组。任务是编写C/C++程序在数组中找到总和为零的三元组,要求时间复杂度为 O(n2 )。

例子 :

输入: arr[] = {0, -1, 2, -3, 1}
输出: 0 -1 1, 2 -3 1
说明:总和为零的三元组是0 + -1 + 1 = 0 和 2 + -3 + 1 = 0

输入: arr[] = {1, -2, 1, 0, 5}
输出: 1 -2 1
解释:总和为零的三元组是1 + -2 + 1 = 0

输入描述

一:

0, -1, 2, -3, 1

二:

1, -2, 1, 0, 5

三:

-5 6 7 -3 1

输出描述
一:

0 -1 1

2 -3 1

二:

1 -2 1

三:

No Triplet Found

AC代码:

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<unordered_map>
#include<unordered_set>
#include<set>
#include<map>
using namespace std;

vector<vector<int>> result;

void findTriplets(vector<int>& arr,int n){
	bool found=false;
	for(int i=0;i<n-1;i++){
		unordered_set<int> s;
		for(int j=i+1;j<n;j++){
			int x=-(arr[i]+arr[j]);
			if(s.find(x)!=s.end()){
				result.push_back({arr[i],x,arr[j]});
				found=true;
			}else{
				s.insert(arr[j]);
			}
		}
	}
//	if(found==false){
//		
//	}
}
int main()
{
	int num;
	vector<int> arr;
	char c;
	while(scanf("%d",&num)!=EOF){
		arr.push_back(num);
		if(c=getchar()=='\n')
      		break;
	}
	int n=arr.size();
	findTriplets(arr,n);
	if(result.size()==0){
		cout<<"No Triplet Found\n"<<endl;
	} 
	else{
		for(int i=0;i<result.size();i++){
			for(int j=0;j<3;j++){
				if(j!=0) cout<<" ";
				cout<<result[i][j];	
			}
			cout<<endl;
		}	
	}
	
	return 0;	
 }  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++笔试机考三道代码题——包括输入输出 的相关文章

  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 选择一家公司看哪些条件

    1 薪资 公司谈的工资都是税前 一般我会认为年薪工资指的就是一年的税前收入 如果有加班费可以把加班费也算上 每月加班时间是有上限的 可以根据个人习惯计算 然后是年终奖 则税前年薪 税前基本工资 加班费 年终奖 你看工资银行卡一年的薪资到账记
  • xcode报错:Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/b

    今天使用xcode编译工程发现一个问题 这里记录一下防止忘记 xcode报错 Command Applications Xcode app Contents Developer Toolchains XcodeDefault xctoolc
  • 本地部署Stable Diffusion

    效果 遇到的坑 报错 RuntimeError LayerNormKernelImpl not implemented for Half 解决方案 产生报错的原因是因为显卡不支持half float的数据类型 所以在启动项set COMMA
  • 微信小程序(由浅到深)

    文章目录 一 项目基本配置 1 项目组成 2 常见的配置文件解析 3 app json全局的五大配置 4 单个页面中的page配置 5 App函数 6 tabBar配置 二 基本语法 事件 单位 1 语法 2 事件 3 单位 三 数据响应式
  • python语法-pyspark实战(数据输入)

    python语法 pyspark实战 数据输入 1 演示通过pyspark代码加载python对象数据 基本数据结构 转为RDD对象 即数据输入 parallelize 方法 演示通过pyspark代码加载数据 即数据输入 from pys
  • varchar2 汉字长度问题

    转载于 https www cnblogs com yangxia test archive 2013 08 07 3242775 html Oracle定义varchar2 类型存储汉字的长度问题 varchar2最大是4000字节 那么
  • 使用 Iptables 命令详细图文教程

    目录 一 防火墙管理工具 二 Iptables 2 1 策略与规则链 2 2 基本的命令参数 2 2 1 在 iptables 命令后添加 L 参数查看已有的防火墙规则链 2 2 2 在 iptables 命令后添加 F 参数清空已有的防火
  • 【Altium designer】定义PCB外形并开槽

    1 PCB自定义外形 项目中经常会用到异形的PCB 需要先在keep out画出PCB外形 也可以直接从cad里面导到AD里面 要注意单位长度的转换 然后框选中keep out的线条 按下快捷键D S D 设计 gt 板子形状 gt 按照选
  • python-爬虫 抓取美食板块商家数据

    import pprint import requests import csv import re url http meishi meituan com i api channel deal list headers User Agen
  • 【odoo15】给用户设置菜单可见的权限与权限组

    设置mykid菜单的可见权限 设置权限后 操作方法 设置 gt 用户和公司 gt 组群 gt 创建组群 test group 技术 gt 用户界面 菜单项目 gt 搜索要添加到组群的菜单 mykid 把用户添加到组群中 刷新后admin这个
  • PageHelper分页插件使用

    分页插件PageHelper MyBatis没有分页功能 需要手动编写LIMIT语句 可以使用第三方的插件来对功能进行扩展 分页助手PageHelper是将分页的复杂操作进行封装 使用简单的方式即可获得分页的相关数据 PageInfo Pa
  • 将代码托管到Github

    1 进入Github网站 https github com 选择登录 sign in 或注册 sign up 如图所示 2 下载桌面程序 GitHub Desktop 网址 https desktop github com 按提示默认安装即
  • pytorch,numpy两种方法实现nms类间+类内

    类间 也就是不同类之间也进行nms 类内 就是只把同类的bboxes进行nms numpy实现 nms类间 类内 import numpy as np 类间nms def nms bboxes scores thresh x1 y1 x2
  • python os.walk 指定遍历深度_安全检查中...

  • Spring:基于xml和注解的aop

    1 导入坐标
  • K8s相关常用命令

    一 查看相关信息 查看pod相关信息 kubectl get pod all namespaces grep 关键字 kubectl get po all namespaces owide grep 关键字 kubectl describe
  • Docker容器与虚拟化技术:Dockerfile部署LNMP

    目录 一 理论 1 LNMP架构 2 背景 3 Dockerfile部署LNMP 3 构建Nginx镜像 4 构建MySQL容器 5 构建PHP镜像 6 启动 wordpress 服务 二 实验 1 环境准备 2 构建Nginx镜像 3 构
  • Websocked的原理和应用场景(心跳模式)

    一 WebSocket是什么 工作原理是什么 WebSocket是一种在Web应用程序中实现双向通信的网络协议 它提供了一种持久连接 允许服务器主动向客户端发送消息 同时也允许客户端向服务器发送消息 相比传统的HTTP请求 响应模式 Web
  • 动态规划之背包问题

    前言 动态规划的本质 是对问题状态的定义和状态转移方程 动态规划具备三个特点 1 将原来的问题分解成几个相似的子问题 2 所有的子问题都只需要解决一次 3 每个状态存储子问题的解 一般从三个角度考虑动态规划 1 状态表示 2 状态计算 gt
  • C++笔试机考三道代码题——包括输入输出

    一 在相邻差为 1 的整数数组中进行有效搜索 时间限制 1000MS 内存限制 65536KB 题目描述 给定一个由n 个整数组成的数组 每个数组元素是通过将 1 或 1 添加到前一个元素获得的 即任意两个连续元素之间的绝对差为 1 任务是