当前位置: 首页 > news >正文

【c++笔试强训】(第三十篇)

目录

爱丽丝的⼈偶(贪⼼+构造)

题目解析

讲解算法原理

编写代码

集合(排序)

题目解析

讲解算法原理

编写代码


爱丽丝的⼈偶(贪⼼+构造)

题目解析

1.题目链接:登录—专业IT笔试面试备考平台_牛客网

2.题目描述

题目描述

爱丽丝有n n\ n 个人偶,每个人偶的身高依次是1、2、3……n 1、2、3……n\ 1、2、3……n 

现在她要将这n n\ n 个人偶摆成一排。

但是人偶被设置了魔法。假设对一个非两端的(不在队首也不在队尾)人偶x x\ x 而言,她相邻的两个人偶,一个比x x\ x 高、一个比x x\ x 矮,那么x x\ x 就会爆炸。

爱丽丝想找到一种摆法,使得所有人偶都不会爆炸。你能帮帮她吗?

输入描述:

一个正整数n n\ n   (3≤n≤100000) (3≤n≤100000)\ (3≤n≤100000) 

输出描述:

满足要求的一种摆法。如果有多解,输出任意一种摆法即可。

示例1

输入

3

3

输出

1 3 2

1 3 2

说明

对于第二个人偶,她两边的两个人偶都比她矮,满足要求。

另外,[3 1 2]、 [2 1 3] 、[2 3 1]这三种摆法也都满足要求。输出这三种摆法也视为正确。

讲解算法原理

解法:
算法思路:

放个⼩的之后,再放个⼤的~

编写代码

c++算法代码:

#include <iostream>
using namespace std;
int n;
int main()
{cin >> n;int left = 1, right = n;while(left <= right){cout << left << " "; left++; if(left <= right) { cout << right << " "; right--;}}return 0;
}

java算法代码:

import java.util.*;
public class Main
{public static void main(String[] args){Scanner in = new Scanner(System.in); int n = in.nextInt();int left = 1, right = n; while(left <= right) {System.out.print(left + " "); left++; if(left <= right){System.out.print(right + " "); right--;}}}
}

集合(排序)

题目解析

1.题目链接:集合_牛客题霸_牛客网

2.题目描述

描述

给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。

输出时按数字升序输出。

数据范围: 1 \le n, m \le 10000 \1≤n,m≤10000 ,集合中的元素满足 1 \le val \le 10^5 \1≤val≤105 

输入描述:

每组输入数据分为三行,第一行有两个数字n,m,分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。

输出描述:

针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。

示例1

输入:

3 3
1 3 5
2 4 6

复制输出:

1 2 3 4 5 6

复制

示例2

输入:

2 2
1 2
1 2

复制输出:

1 2

讲解算法原理

解法:
算法思路:

什么?笔试题?我直接set⾛起!

编写代码

c++算法代码:

#include <iostream>
#include <set>
using namespace std;
int main()
{int n, m;cin >> n >> m;int x;set<int> s;for(int i = 0; i < n; i++){cin >> x;s.insert(x);}for(int i = 0; i < m; i++){cin >> x;s.insert(x);}for(auto x : s){cout << x << " ";}return 0;
}

Java算法代码:

import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main
{public static void main(String[] args) {Scanner in = new Scanner(System.in); int n = in.nextInt(), m = in.nextInt();TreeSet<Integer> set = new TreeSet<>(); int x; while(n-- != 0){x = in.nextInt(); set.add(x);}while(m-- != 0){x = in.nextInt(); set.add(x);}for(int a : set){System.out.print(a + " ");}}
}

http://www.lryc.cn/news/497749.html

相关文章:

  • 微信小程序购物车全选反选功能以及合计
  • vue-qr在线生成二维码组件(vue2版本)
  • 大语言模型技术相关知识-笔记整理
  • SCP命令实现Linux中的文件传输
  • linux环境中后台运行java程序
  • Go学习:变量
  • 在Unity编辑模式下运行Mono中的方法
  • Y20030028 JAVA+SSM+MYSQL+LW+基于JAVA的考研监督互助系统的设计与实现 源代码 配置 文档
  • MATLAB期末复习笔记(下)
  • 「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器
  • MySql:理解数据库
  • 学习笔记051——SpringBoot学习2
  • crush rule 20 type does not match pool
  • BA是什么?
  • 通过docker 搭建jenkins环境;
  • 10-高级主题
  • harbor常见问题及解决方法分享
  • 行列式与线性方程组解的关系
  • 四、自然语言处理_02RNN基础知识笔记
  • Spring 容器管理 Bean
  • SpringBoot开发——Spring Boot3.4 强大的结构化日志记录
  • 信号和槽思维脑图+相关练习
  • Unity Feel插件快速入门
  • 数据链路层(四)---PPP协议的工作状态
  • 【C++】入门【六】
  • UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets
  • Elasticsearch Serverless 现已正式发布
  • 如何使用apache部署若依前后端分离项目
  • openEuler安装UKUI桌面
  • 深入理解Oracle DB的锁和闩