秋招突击——7/20——科大讯飞笔试相关——提前{图像叠加、世界杯积分问题、直角三角形个数}——正式{持续输出中位数,二次幂和三次幂的序列表示}

文章目录

    • 引言
    • 提前
      • 图像叠加
      • 世界杯积分问题
        • 个人实现
        • 参考实现
      • 直角三角形个数
        • 个人实现
    • 正式
      • 等待时间期望值
      • 中位数输出
        • 个人实现
      • 二次幂和三次幂序列
        • 个人实现
    • 总结

引言

  • 昨天用了牛客网做了一下作业帮的笔试,做的一塌糊涂,但是提醒我要练习使用牛客网的环境进行相关的开发,差不多练了三四个小时,做了两道题。
  • 今天晚上七点钟到九点钟是科大讯飞的笔试时间,今天准备上午总结一下以前做的题型,然后的做一套科大讯飞前年的试卷。
    • 试卷链接

提前

图像叠加

在这里插入图片描述

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// deinfe the data to store the imageint m = in.nextInt();int n = in.nextInt();int[][][] img = new int[2][m][n];for(int i = 0;i < 2;i ++){for(int r = 0;r < m;r ++){for(int c = 0;c < n;c ++){img[i][r][c] = in.nextInt();}}}// handle the imgint [][] res = new int[m][n];for(int i = 0;i < m;i ++){for(int j = 0;j < n;j ++){res[i][j] = img[0][i][j] + 2 * img[1][i][j] - 255;if(res[i][j] < 0) res[i][j] = 0;else if(res[i][j] > 255) res[i][j] = 255;  System.out.print(res[i][j] + " ");}System.out.println();}}
}

在这里插入图片描述

总的来说,这道题还是很简单的!

世界杯积分问题

在这里插入图片描述

个人实现
  • 这题感觉就是一个正确答案的话,就是能够模拟计算出所有的情况,然后形成一个hash,然后返回大小,并且判定结果是否存在即可!关键在于怎么模拟!
  • 不是很懂这个赛制,正常来说肯定是C(5,2),这个感觉得用递归去做,但是我觉得有点别扭,整起来怪怪的!

这里用回溯重实现了一下,是不是太过于繁琐了?

import java.util.Scanner;
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {static Set<List<Integer>> set = new HashSet<>();static Pair[] vs = new Pair[10];static class Pair{public int x;public int y;public Pair(int a,int b){x = a;y = b;    }}static void dfs(int idx ,List<Integer> score){if(idx == 10)  { List<Integer> tempList = new ArrayList<>(score);Collections.sort(tempList);set.add(tempList);}else{// traverse 3 conditions// a win bscore.set(vs[idx].x,score.get(vs[idx].x) + 3);dfs(idx + 1,score);score.set(vs[idx].x,score.get(vs[idx].x) - 3);// a lose bscore.set(vs[idx].y,score.get(vs[idx].y) + 3);dfs(idx + 1,score);score.set(vs[idx].y,score.get(vs[idx].y) - 3);// a and bscore.set(vs[idx].x,score.get(vs[idx].x) + 1);score.set(vs[idx].y,score.get(vs[idx].y) + 1);dfs(idx + 1,score);score.set(vs[idx].x,score.get(vs[idx].x) - 1);score.set(vs[idx].y,score.get(vs[idx].y) - 1);}}public static void main(String[] args) {// define vs[] to store the copmetition seq, score to store the score of each teamList<Integer> score = new ArrayList<>(Arrays.asList(0,0,0,0,0));int idx = 0;for(int i = 0;i < 5;i ++){for(int j = i + 1;j < 5;j ++){vs[idx] = new Pair(i,j);idx ++;}}dfs(0,score);// handle the input Scanner in = new Scanner(System.in);int count = in.nextInt();if(set.size() == count )  System.out.print("yes ");else System.out.print("no ");List<Integer> temp = new ArrayList<>();for(int i = 0;i < 5;i ++){temp.add(in.nextInt());}Collections.sort(temp);if(set.contains(temp))  System.out.println("yes");else System.out.println("no");// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextInt()) { // 注意 while 处理多个 caseint a = in.nextInt();int b = in.nextInt();System.out.println(a + b);}}
}
参考实现
  • 同样的方法,但是他写的好像比我简洁!
import java.util.*;public class Main {static Set<List<Integer>> validScores = new HashSet<>();static final int TEAMS = 5;static final int GAMES = 10;public static void main(String[] args) {// 生成所有可能的得分组合generateAllPossibleScores(new int[TEAMS], 0, 0, 0);// 读取输入Scanner scanner = new Scanner(System.in);List<Integer> inputScores = new ArrayList<>();for (int i = 0; i < TEAMS; i++) {inputScores.add(scanner.nextInt());}Collections.sort(inputScores, Collections.reverseOrder());// 判断输入的得分组合是否在所有可能的得分组合中if (validScores.contains(inputScores)) {System.out.println("yes");} else {System.out.println("no");}scanner.close();}// 递归生成所有可能的得分组合static void generateAllPossibleScores(int[] scores, int gameIndex, int teamA, int teamB) {if (gameIndex == GAMES) {List<Integer> sortedScores = new ArrayList<>();for (int score : scores) {sortedScores.add(score);}Collections.sort(sortedScores, Collections.reverseOrder());validScores.add(sortedScores);return;}// 获取当前的比赛队伍组合teamA = gameIndex / (TEAMS - 1);teamB = gameIndex % (TEAMS - 1);if (teamB >= teamA) {teamB++;}// A winsscores[teamA] += 3;generateAllPossibleScores(scores, gameIndex + 1, teamA, teamB);scores[teamA] -= 3;// B winsscores[teamB] += 3;generateAllPossibleScores(scores, gameIndex + 1, teamA, teamB);scores[teamB] -= 3;// Drawscores[teamA] += 1;scores[teamB] += 1;generateAllPossibleScores(scores, gameIndex + 1, teamA, teamB);scores[teamA] -= 1;scores[teamB] -= 1;}
}

但是不是很好读,不是很好理解!

直角三角形个数

在这里插入图片描述

个人实现
  • 这道题会相对好做一点,准备采用暴力搜索的方式解决,现在是怎么提前计算,才能减少计算量。使用一个二维数组提前保存下来,应该是可以的!
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// get the dataint count = in.nextInt();int[][] point = new int[count][2];int[][] dist2 = new int[count][count];for(int i = 0;i < count;i ++){point[i][0] = in.nextInt();point[i][1] = in.nextInt();// cal the distance square of the pointsfor(int j = 0;j < i;j ++){dist2[i][j] = (int)Math.pow((point[i][0] - point[j][0]),2) +  (int)Math.pow((point[i][1] - point[j][1]),2) ;dist2[j][i] = dist2[i][j];}}// define the set to filter the resultSet<List<Integer>> set = new HashSet<>();for(int a = 0;a < count ;a ++){for(int b = a + 1;b < count ;b ++){for(int c = b + 1;c < count ;c ++){int maxLen = Math.max(Math.max(dist2[a][b],dist2[a][c]),dist2[b][c]);if(2 * maxLen == dist2[a][b] + dist2[a][c] + dist2[b][c]){set.add(Arrays.asList(a,b,c));}}}}System.out.println(set.size());}
}

在这里插入图片描述
这里直接暴力通过了,还是比较意外的,感觉应该有什么特殊的数学关系可以调用的!

正式

等待时间期望值

  • 这个太简单了,就不写了!

中位数输出

  • 给你n个整数,每一个数字是0到10的九次方,然后你找到它的中位数进行输出
    • 如果序列是偶数,有以下两种情况处理
      • 两数相等,随便输出一个
      • 两数不等,输出较小的一个
    • 如果的序列是奇数,直接输出中间值。
  • 持续输出,直到输出整个序列!

输入样例

  • 5
  • 1 2 3 4 5

输出样例

  • 3 2 4 1 6
个人实现
  • 这里使用对顶堆实现,不过我花了很多时间,不应该是这样的!
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int count = in.nextInt();PriorityQueue<Integer> front = new PriorityQueue<>(Comparator.reverseOrder());PriorityQueue<Integer> back = new PriorityQueue<>();for(int i = 0;i < count ;i ++)  back.add(in.nextInt());while(!front.isEmpty() || !back.isEmpty()){while(front.size() < back.size()){front.add(back.poll());}if(front.size() == back.size()){if(front.peek() < back.peek()){System.out.print(front.poll() + " ");}else {System.out.print(back.poll() + " ");}}else{System.out.print( front.poll()+ " ");}}}
}

在这里插入图片描述

二次幂和三次幂序列

  • 先给一个数字n,n = 3 x 0 ∗ 2 y 0 3^{x_0}* 2^{y_0} 3x02y0 + 3 x 1 ∗ 2 y 1 3^{x_1}* 2^{y_ 1} 3x12y1 + 3 x 2 ∗ 2 y 2 3^{x_2}* 2^{y_2} 3x22y2,然后将上述每一个子项按照从小到大进行排序,输出对应序列为{ 3 x 0 ∗ 2 y 0 3^{x_0}* 2^{y_0} 3x02y0 3 x 1 ∗ 2 y 1 3^{x_1}* 2^{y_ 1} 3x12y1 3 x 2 ∗ 2 y 2 3^{x_2}* 2^{y_2} 3x22y2},不要求找一个最短的,只要能够输出就行。不如说10 = 3 0 ∗ 2 3 3^{0}* 2^{3} 3023 + 3 0 ∗ 2 1 3^{0}* 2^{1} 3021,输出的序列是{2,8},只要输出一个就行了!
  • n的数字范围是1到10的9次方。
个人实现
  • 这道题当时没有写完,但是有了基本的思路,使用最基本的回溯实现。
  • 我很懊恼呀,明明能够写出来的,我一开始误认为是零一背包,然后整了半天,发现还是得回溯,还是编程得速度不够快,当时没有想清楚,不应该!属实不应该!就是应该多练习一下!
import java.util.Scanner;
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {static boolean dfs(int num,Map<Integer,Boolean> map,List<Integer> res){if(num == 0){Collections.sort(res,Collections.reverseOrder());for(int i = 0; i < res.size(); i++) {System.out.print(res.get(i) + " ");}System.out.println();return true;}for(int x:map.keySet()){if(map.get(x) == true && x <= num){res.add(x);map.put(x,false);if(dfs(num - x,map,res)) return true;res.remove(res.size() - 1);map.put(x,true);}}return false;}public static void main(String[] args) {Scanner in = new Scanner(System.in);int num = in.nextInt();// define two arrays to store the exp of 2 and 3int[] exp2 = new int[31];for(int i = 0; i < 31; i++) {exp2[i] = (int)Math.pow(2, i);}int[] exp3 = new int[19];for(int i = 0; i < 18; i++) {exp3[i] = (int)Math.pow(3, i);}//  define the map to store the numMap<Integer,Boolean> map = new HashMap<>();for(int i = 0; i < 31; i++) {for(int j = 0; j < 18; j++) {if((long)exp2[i] * (long)exp3[j] <= Integer.MAX_VALUE)map.put(exp2[i] * exp3[j], true);}}// find the resList<Integer> res = new ArrayList<>();dfs(num,map,res);}
}

捶胸顿足,难受,差不多都做出来了,但是时间没有安排好,还有就是写的太慢了!是什么让你写的那么慢?

  • 不确定使用哪种数据结构,然后来回切换两种方法==》对于回溯还不够熟悉!
  • 对于相关函数还不够熟悉!

总结

  • 练习题做了蛮长时间的,不过好在都做出来了,还是得加快编码的速度!加油!

  • 今天做了,还是蛮失望的,没想到有那么多选择题,考察面很广,实际上用来做算法题的时间并不多,最终效果做的一般!

    • 第一题,五分钟写完了,但是只能通过27%的样例,花了半个小时改,最终没什么效果
    • 第二题,半个小时写完,但是通过百分之八十的样例,后来花时间重写了对顶堆,然后的通过了所有样例,花的时间有点久!不应该!
    • 第三题,没写出来,应该是使用回溯做出来的!但是没写出来,时间太短了!现在五分钟就写出来了!但凡平和的心态再来五分钟,我就能写完!肯定能够写完!
  • 暴露出两个问题

    • 题目写少了,对于很多Java的方法还不熟悉,比如说isEmpty不是Empty还在这整半天
    • 然后回溯类的题型刷少了,不应该,后续把回溯全部刷完!
    • 回溯和动态规划就是可以相互转换的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Matlab的数据可视化

基于Matlab的数据可视化 一、二维图形的绘制&#xff08;一&#xff09;基本图形函数&#xff08;1&#xff09;plot函数&#xff08;2&#xff09;fplot函数&#xff08;3&#xff09;其他坐标系的二维曲线 &#xff08;二&#xff09;图形属性设置&#xff08;1&#xff09;线…

Linux网络:应用层协议HTTP(一)

一、什么是HTTP协议 虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c;HTTP&#xff08;HyperText Transfer Protocol&…

C#中的栈和队列

什么是栈 栈和队列是非常重要的两种数据结构,在软件设计中应用很多。栈和队列也是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到眼制。栈的操作只能在表的一端进行,队列的插入操作在表…

安卓篇-unidbg初步测试

前言:目前app的进度是c层的md5魔改 已经做好,又套了一层java层的加密。刚好可以再熟悉一下unidbg 最新版的app ,作为demo测试一下。 分析先看下app 的反编译的结果,很明显,源码很清晰 ,之前的混淆方式一点用没有。 然后跳过去 /* loaded from: classes4.dex */ public c…

FPGA实验5:4位加法计数器

实验目的及要求 掌握时钟信号、进程和BUFFER端口的运用&#xff1b;了解计数器的设计、仿真和硬件测试&#xff0c;进一步熟悉VHDL语句、语法及应用等。 实验原理 运用Quartus II 集成环境下的VHDL文本设计方法设计4位加法计数器&#xff0c;进行波形仿真和分析、引脚分配…

4 Java的基本程序设计结构(基本语法3)- 字符串、面向对象(进阶)

文章目录 前言一、java中的 究竟比较的是什么&#xff1f;二、字符串1 String&#xff08;1&#xff09;String的两种构造方式&#xff08;2&#xff09;字符数组转字符串、字节数组转字符串&#xff08;3&#xff09;字符串的 拼接&#xff08;4&#xff09;字符串的内存结构…

【Android面试八股文】荣耀面试算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵

文章目录 1. 算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵1.1 题目描述1.2 算法实现1.2.1 步骤说明:1.2.2 算法实现1.2.3 代码实现:1.2.4 程序说明:1.2.5 示例详细讲解如何将一个矩阵顺时针旋转90度1. 算法题:输入一个N阶方…

Spring -- 三层架构

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 应用分层 介绍 在阿里的开发手册里,关于工程结构部分,定义的常见工程的应用分层结构 那么什么是应用分层呢? 应用分层是一种软件开发设计思想,他将应用程序分层N个层次.这N个层次分别负责各…

Oracle小白菜鸟从入门到精通教程

前言 Oracle公司&#xff08;甲骨文&#xff09;是全球最大的信息管理软件及服务供应商&#xff0c;成立于1977年&#xff0c;总部位于美国加州Redwood shore&#xff0c;面向全球开放oracle认证。Oracle开发的关系数据库产品因性能卓越而闻名&#xff0c;Oracle数据库产品为财…

Hi6274 反激式20瓦电源芯片

HI6274为高性能多模式 PWM 反激式20瓦电源芯片。HI6274较少的外围元器件、较低的系统成本可设计出高性能的"无Y"开关电源。HI6274提供了极为全面和性能优异的智能化保护功能&#xff0c;包括逐周期过流保护、过载保护、软启动、芯片过温保护、可编程输出过压保护功能…

【Langchain大语言模型开发教程】记忆

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…

世界启动Ⅷ--AI视频制作-方案与创新

1.文本/图片生成视频顾名思义&#xff0c;就是输入一段文本描述/上传一张图片即可生成对应的视频。我们常见的Runway、Pika、NeverEnds、Pixverse、svd等都属于此类。比如runway的影视风格Pika的动漫风格NeverEnds的人像模特当然还有一些外延应用&#xff0c;例如最近比较火的阿…

《从C/C++到Java入门指南》- 17.命令行参数

命令行参数 一直写代码的童鞋可能留意到了&#xff0c;main函数中会传入一个String args[]的字符串数组。 这个数组由JVM接收用户输入并传给main函数。 import java.util.*; public class Main {public static void main(String[] args) {for (String arg : args) {System.out…

FLINK-运行架构

为什么要学习Flink运行架构&#xff1f; 虽然现在大厂的开发工具都非常高效、只需要进行参数配置、Flink-sql写业务逻辑&#xff0c;但是在资源配置逻辑优化上不可避免需要了解底层的组件配置。面试时可能也会被问到FLINK是如何进行资源分配、作业运行的等。 以下是在学习时记录…

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图(二D)

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图&#xff08;二D&#xff09; 散点图示例解析效果 饼图示例解析效果 折线图示例解析效果 柱状图示例解析效果 箱线图示例解析效果 直方图示例解析效果 等高线图使用filled.contour函数示例…

Python学习—open函数,json与pickle知识点,Os模块详解

目录 1. Open函数 2.json与pickle模块 json模块 1. json.dumps() 2. json.dump() 3. json.loads() 4. json.load() pickle 模块 1. pickle.dumps() 2. pickle.dump() 3. pickle.loads() 4. pickle.load() 3.Os模块 1. Open函数 在Python中&#xff0c;open() 函数…

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作&#xff0c;本次操作需要java8的版本&#xff0c;将之前安装的java17卸…

IoTDB 分段查询语句详解:GROUP BY + 时序语义

GROUP BY 查询子句的时序语义展开&#xff0c;IoTDB 支持的分段方式总结&#xff01; 存储的数据通过分析来发挥价值&#xff0c;当一组被存储的数据通过查询得到分析后的结果时&#xff0c;这些数据才真正在数据库中实现了价值闭环。 在关系型数据库中&#xff0c;GROUP BY 子…

陀螺仪LSM6DS3TR-C的简单使用

文章目录 一、前言二、硬件1.引脚说明2.原理图 三、软件1.IIC读写函数1.1 读函数1.2 写函数 2.初始化2.1 检测设备是否存在2.2 读取LSM6DS3TRC器件ID2.3 LSM6DS3TRC重启&#xff0c;重置寄存器2.5 LSM6DS3TRC设置块数据更新2.6 LSM6DS3TRC设置加速度计的数据采样率2.7 LSM6DS3T…

剪画小程序:刷到好听的音频怎么将音频保存到手机里

在这个短视频盛行的时代&#xff0c;相信很多朋友都和我一样&#xff0c;常常会被那些精彩视频中的背景音乐深深吸引。 比如我&#xff0c;特别喜欢听歌&#xff0c;这段时间在短视频平台上刷到了好多好看的视频&#xff0c;里面的背景音乐简直绝绝子&#xff01; 那么&#x…