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的更多相关文章

  1. 华为OD机试题

    """最长回文字符串问题"""# 说明:方法很多,这个是最简单,也是最容易理解的一个,利用了动态规化.# 先确定回文串的右边界i,然后以右边 ...

  2. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  3. Java基础机试题

    package day8;import java.util.Scanner;/** * Java基础机试题 * @author:lyrand * */public class convert {   ...

  4. 牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  5. 华为机试题【13】-wave数组找字母游戏

    题目描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你 ...

  6. 华为机试题【10】-求数字基root

    题目描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 输入:输入任意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行对应一 ...

  7. 九度oj题目&amp;吉大考研10年机试题全解

    吉大考研机试2010年题目 题目一(jobdu1478:三角形的边).    http://ac.jobdu.com/problem.php?pid=1478 给出三个正整数,计算最小的数加上次小的数 ...

  8. C#经典机试题(猫叫)

    猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. public interface Observ ...

  9. java ee 面试时的机试题

    写一个简单的用户登录  servlet+jsp+原生ajax+json实现方式:  http://pan.baidu.com/s/1jGDY5h0

  10. ASPNET服务端控件练习(一个机试题)

    简单记录: 模糊查询的select语句的拼写 public List<Model.Student> GetWhereStudent(string name, string sub, str ...

随机推荐

  1. ORACLE查看表占用空间的大小

    查询object的大小,按照降序排序 select  * from user_segments s  where s.BYTES  is not null  order by s.BYTES desc ...

  2. 将字符串数组String[]转换成List的三种方法

    通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. String[] strArray = new String[2]; Li ...

  3. Vue3.0 里为什么要用 Proxy API 替代 defineProperty API?

    响应式优化. a. defineProperty API 的局限性最大原因是它只能针对单例属性做监听. Vue2.x 中的响应式实现正是基于 defineProperty 中的 descriptor, ...

  4. TCP三次握手和四次挥手的原因所在

    报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接. 为什么需要三次握手呢?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误. 比如:client发出 ...

  5. javaScript的介绍

    JavaScript Java Script的概述: 1组成 三部分组成 ecmaScript 基础语法(es5) dom document object 莫得了 文档对象模型 (操作html文档内容 ...

  6. python 深拷贝及浅拷贝区别

    深拷贝及浅拷贝区别 浅拷贝copy: 可变类型:(列表,字典,集合)copy函数对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象 不可变类型:(数字,字符 ...

  7. formidable处理文件上传的细节

    koa在请求体的处理方面依赖于通用插件koa-bodyparser或者koa-body,前者比较小巧,内部使用了co-body库,可以处理一般的x-www-form-urlencoded格式的请求,但 ...

  8. java初学者-向一个长度为5的整型数组中随机生成5个1-10的随机整数 ,要求生成的数字中没有重复数

    public static void main(String[]args){ //定义一个数组 长度为5:角标为4 int []arr=new int[5]; for(int i=0;i<5;i ...

  9. Offer 提速:如何写出有亮点的简历

    先来个灵魂拷问: 你与他人相比,有什么能形成明显区分度的优势条件? 这里有两个层面的问题,一是 如何识别出你的优势条件,毕竟大多数人大多数时候可能都是在做业务,临到写简历的时候要求总结日常工作中跟别人 ...

  10. python 购物小程序

    要求:  1.启动程序后,让用户输入预算,然后打印商品列表  2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额够不够,够就直接付款,不够就提醒 4.可随时退出,推出时打印已购买商品和余额 ...