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. js已知多边形坐标点,求多边形的中心点坐标

    你需要传入的数据类型如下: // 取面对象 中心点 var calculateCenter = function (lnglatarr) { var total = lnglatarr.length; ...

  2. PHP连接FTP服务器获取文件

    运行结果:

  3. [336] Prelude PTS OpCodes

    [336] Prelude PTS Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestEnterWorl ...

  4. CCF 202006-1 线性分类器

    #include <iostream> #include <bits/stdc++.h> #include <string> using namespace std ...

  5. dead code?

    public static void main(String[] args) { DriverBase dbase = new DriverBase(); dbase.driverBase(); dr ...

  6. vue + antV G6 实现流程图完整代码 (antv G6 流程图)

    效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  7. window安装、启动consul

    1.官网下载:https://www.consul.io/downloads.html 2.下载解压后的安装包只有一个consul.exe文件,双击可查看版本信息 3.设置环境变量,在Path下新增一 ...

  8. 利用expect交互批量修改普通用户过期密码

    利用expect交互批量修改普通用户过期密码 因为公司接了一个密码托管的活,有10000多台机器,系统有 openSUSE,SUSE,Ubuntu,centos,Oracle-Linux, 而且什么版 ...

  9. Console对象的实例方法

    1.console.table 将数据以表格的形式显示. 这个方法需要一个必须参数 data,data 必须是一个数组或者是一个对象:还可以使用一个可选参数 columns. // Output an ...

  10. tomcat 重启脚本

    1 创建脚本后将脚本放到tomcat/bin目录下并授权,就可以通过此脚本一键重启拉! #!/bin/bash tomcat_path1="$( cd "$( dirname &q ...