OD机试题-2022.4
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class ODTest {
public static void main(String[] args) {
/**
* 1. 标题:构成的正方形数量 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
* 输入N个互不相同的二维整数坐标, 求这N个坐标可以构成的正方形数量。(内积为零的两个向量垂直)
* 输入描述:
* 第一行输入为 N,N 代表坐标数量,N为正整数。N <= 100
* 之后的 K 行输入为坐标 x y以空格分隔,x, y 为整数, -10<=x, y <= 10
* 输出描述:
* 输出可以构成的正方形数量
* 示例1
* 输入
* 3
* 1 3
* 2 4
* 3 1
* 输出
* 0
* 说明 3个点不足以构成正方形
* 示例2
* 输入
* 4
* 0 0
* 1 2
* 3 1
* 2 -1
* 输出
* 1
* 说明 此4点可构成正方形
*/
Scanner scanner = new Scanner(System.in);
int N = Integer.parseInt(scanner.nextLine());
if (N < 4) {
System.out.println(0);
return;
}
//定义N行两列的二维数组
int[][] zuobiaos = new int[N][2];
for (int i = 0; i < zuobiaos.length; i++) {
String[] strings = scanner.nextLine().split(" ");
zuobiaos[i][0] = Integer.parseInt(strings[0]);
zuobiaos[i][1] = Integer.parseInt(strings[1]);
}
int count = 0;
for (int i = 0; i < zuobiaos.length - 3; i++) {
for (int j = i + 1; j < zuobiaos.length - 2; j++) {
for (int k = j + 1; k < zuobiaos.length - 1; k++) {
for (int l = k + 1; l < zuobiaos.length; l++) {
if (canBeSquare(zuobiaos[i], zuobiaos[j], zuobiaos[k], zuobiaos[l])) {
count++;
}
}
}
}
}
System.out.println(count);
/**
* 2. 如果三个正整数A、B、C ,A²+B²=C²则为勾股数
* 如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,
* 则称其为勾股数元组。
* 请求出给定n~m范围内所有的勾股数元组
*/
List<int[]> out2 = fun2(1, 20);
out2.forEach(res1 -> {
System.out.println(res1[0] + " " + res1[1] + " " + res1[2]);
});
/**
* 3. 警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。
* 根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,
* 构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。"
*/
String out3 = fun3("22:59");
System.out.println(out3);
}
public static boolean canBeSquare(int[] i, int[] j, int[] k, int[] l) {
//0 0, 1 2, 3 1, 2 -1
return calculate(new int[]{i[0] - j[0], i[1] - j[1]}, new int[]{k[0] - l[0], k[1] - l[1]}) ||
calculate(new int[]{i[0] - k[0], i[1] - k[1]}, new int[]{j[0] - l[0], j[1] - l[1]}) ||
calculate(new int[]{i[0] - l[0], i[1] - l[1]}, new int[]{j[0] - k[0], j[1] - k[1]});
}
// 关键点: 判断正方形,需要其对角线垂直且长度相等
public static boolean calculate(int[] vec1, int[] vec2) {
return vec1[0] * vec2[0] + vec1[1] * vec2[1] == 0 && (vec1[0] * vec1[0] + vec1[1] * vec1[1]) == (vec2[0] * vec2[0] + vec2[1] * vec2[1]);
}
public static List fun2(int n, int m) {
List res = new ArrayList();
for (int a = n; a <= m; a++) {
for (int b = a + 1; b <= m; b++) {
double y = Math.pow(a, 2) + Math.pow(b, 2);
for (int c = b + 1; c <= m; c++) {
double x = Math.pow(c, 2);
if (x == y) {
if (isP(a, b) && isP(a, c)) {
res.add(new int[]{a, b, c});
}
}
}
}
}
return res;
}
public static boolean isP(int a, int b) {
if (a < b) {
int tmp = a;
a = b;
b = tmp;
}
int c;
while ((c = a % b) !=0) {
a = b;
b = c;
}
return b == 1;
}
public static String fun3(String time) {
char[] chars = time.toCharArray();
//单个数字list
ArrayList<Integer> nums = new ArrayList<>();
for (char c : chars) {
if (c != ':') {
nums.add(c - '0');
}
}
String[] split = time.split(":");
//小时
Integer H = Integer.parseInt(split[0]);
//分钟
Integer M = Integer.parseInt(split[1]);
ArrayList<Integer> list = new ArrayList<>();
for (int i : nums) {
for (int j : nums) {
if (i <= 5) {
list.add(i * 10 + j);
}
}
}
//备选项排序,既可当H,也可以当M
list.sort(Comparator.comparing(o -> o));
//仅仅改变分钟就能得到最近的值
for (int i : list) {
if (i <= M) {
continue;
}
//12:13 -> 12:31
return format(H + ":" + i);
}
//小时数在23以下,可以使用最近的小时数
if (H != 23) {
for (int i : list) {
if (i <= H) {
continue;
}
//确保i的合法性
if (i <= 23) {
//12:59 ->15:11
return format(i + ":" + list.get(0));
}
}
}
//无法改别最近的小时与分钟。如23:59,00:00,15:15
return format(list.get(0) + ":" + list.get(0));
}
public static String format(String time) {
String[] split = time.split(":");
String H = split[0];
String M = split[1];
H = H.length() == 2 ? H : "0" + H;
M = M.length() == 2 ? M : "0" + M;
return H + ":" + M;
}
}
OD机试题-2022.4的更多相关文章
- 华为OD机试题
"""最长回文字符串问题"""# 说明:方法很多,这个是最简单,也是最容易理解的一个,利用了动态规化.# 先确定回文串的右边界i,然后以右边 ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- Java基础机试题
package day8;import java.util.Scanner;/** * Java基础机试题 * @author:lyrand * */public class convert { ...
- 牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 华为机试题【13】-wave数组找字母游戏
题目描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你 ...
- 华为机试题【10】-求数字基root
题目描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 输入:输入任意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行对应一 ...
- 九度oj题目&吉大考研10年机试题全解
吉大考研机试2010年题目 题目一(jobdu1478:三角形的边). http://ac.jobdu.com/problem.php?pid=1478 给出三个正整数,计算最小的数加上次小的数 ...
- C#经典机试题(猫叫)
猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. public interface Observ ...
- java ee 面试时的机试题
写一个简单的用户登录 servlet+jsp+原生ajax+json实现方式: http://pan.baidu.com/s/1jGDY5h0
- ASPNET服务端控件练习(一个机试题)
简单记录: 模糊查询的select语句的拼写 public List<Model.Student> GetWhereStudent(string name, string sub, str ...
随机推荐
- IE 浏览器element-ui table: show-overflow-tooltip 临界值时失效
问题: 在使用el-table表格时,有时会用到show-overflow-tooltip属性,即当单元格内容不能完全显示时显示tooltip文字提示,并且单元格里的内容显示省略号. 但是在ie浏览器 ...
- 完全使用vscode开发python
完全使用vscode开发python 作为Python开发,以前一直使用Pycharm社区版,因为卡顿,尝试使用vscode替换,尝试后并在工作中使用了半个月觉得真香,所以分享给大家. 更详细的视频介 ...
- Java jar打包成exe应用程序,可在无JDK/JRE环境下运行
转载自 https://blog.csdn.net/hao65103940/article/details/106494964 前期准备 一个jar包,没有bug能正常启动的jar包 exe4j,一个 ...
- FFmpeg 摄像头采集
FFmpeg 摄像头采集 extern "C" { #include "libavcodec/avcodec.h" #include "libavfo ...
- labwindows excel 不同电脑上无法保存
存到c盘以外的盘,c盘因为权限问题可能无法写入
- Leetcode本地阅读器开发--01界面设计三
这篇文章主要写一下怎样实现定类别查找. 1 void Widget::on_comboBox_currentIndexChanged(int index) 2 { 3 QString sortname ...
- 【逆向】使用IDA Python脚本自动化解密字符串数据
前言 一个肚脑虫(Donot)APT组织的下载器样本,样本中的一些关键字符串数据需要使用指定函数进行动态解密.所以正好借此机会记录下怎么使用IDA Python脚本来解密字符串数据.使用IDA Pyt ...
- 时钟同步技术----NTP
深圳市立显电子有限公司,专业LED时钟生产厂家!--------[点击进入] 学校考场医院车站GPS/NTP网络校时之组联网对时精度达5ppm原理剖析. 时间精度是根据各个用户所要求对 ...
- SpringIOC以及AOP注解开发
和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作. 本质上:所有一切的操作都是 Java ...
- 【项目记录】4:Pycharm激活方法
引用一下: 今天给大家带来一种全新的Pycharm安装激活方式.可以激活到2099年. 安装 1.我们首先进入idea官网 jetbrains.com 找到最新版本的pycharm,这里就以windo ...