目录

  • Week4
    • Day1
      • 错选择
      • 汽水瓶
      • 查找两个字符串a,b中的最长公共子串
    • Day2
      • 错选择
      • 字符串反转
      • 公共字串计算
    • Day3
      • 错选择
      • 洗牌
      • MP3光标位置
    • Day5
      • 错选择
      • 微信红包
      • 计算字符串的距离
    • Day6
      • 错选择
      • 年终奖
      • 迷宫问题

Week4

Day1

错选择

用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()
A 仅修改队头指针
B 仅修改队尾指针
C 队头、队尾指针都可能要修改
D 队头、队尾指针都要修改

正确答案:C

平常如果队列有很多元素的时候,只需要改变队头的指针即可,但是如果是出的倒数第二个元素,则需要改变头指针和尾指针的指向关系,所以队头、队尾指针都可能要修改。


汽水瓶

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int n = scanner.nextInt();if(n == 0) return;int count = 0;while (n > 2) {int kong = n%3;int drink = n/3;count += drink;n = kong + drink;}if(n == 2) count++;System.out.println(count);}}
}

查找两个字符串a,b中的最长公共子串

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String str1 = scanner.nextLine();String str2 = scanner.nextLine();if(str1.length() > str2.length()) {String tmp = str1;str1 = str2;str2 = tmp;}int[] res = new int[2];int max = 0;for (int i = 0; i < str1.length(); i++) {int j = i+1;String tmp = "";while (true) {if(j <= str1.length()) {tmp = str1.substring(i,j);}if(j <= str1.length() && str2.contains(tmp)) {j++;}else {if(j-1-i > max) {res[0] = i;res[1] = j-1;max = j-1-i;}break;}}}String result = str1.substring(res[0],res[1]);System.out.println(result);}}
}

Day2

错选择


字符串反转

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNext()) {String n = scanner.nextLine();char[] res = n.toCharArray();int i = 0;int j = res.length-1;while(i < j) {char tmp = res[i];res[i] = res[j];res[j] = tmp;i++;j--;}String result = String.valueOf(res);System.out.println(result);}}
}

公共字串计算

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String str1 = scanner.nextLine();String str2 = scanner.nextLine();if(str1.length() > str2.length()) {String tmp = str1;str1 = str2;str2 = tmp;}int max = 0;for (int i = 0; i < str1.length(); i++) {int j = i+1;String tmp = "";while (true) {if(j <= str1.length()) {tmp = str1.substring(i,j);}if(j <= str1.length() && str2.contains(tmp)) {j++;}else {if(j-1-i > max) {max = j-1-i;}break;}}}System.out.println(max);}}
}

Day3

错选择

有权值分别为11,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为_______。
A 24
B 71
C 48
D 53

正确答案:B

哈夫曼树定义:当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”

结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权。例如,图 1 中结点 a 的权为 7,结点 b 的权为 5。

结点的带权路径长度:指的是从根结点到该结点之间的路径长度(深度)与该结点的乘积。例如,图 1 中结点 b 的带权路径长度为 2 * 5 = 10 。

树的带权路径长度为树中所有叶子结点的带权路径长度之和。通常记作 “WPL” 。例如图 1 中所示的这颗树的带权路径长度为:
WPL = 7 * 1 + 5 * 2 + 2 * 3 + 4 * 3

思路 : 要让自己构造最小的带权路径,这里有5个叶子节点,就画一个5个叶子节点的二叉树,要保证带权路径最小,那就把权值大的节点放在深度低的层,权值小的节点放深度高的层,保证所有带权路径最小。


洗牌

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int t = scanner.nextInt();for (int i = 0; i < t; i++) {int n = scanner.nextInt();int k = scanner.nextInt();int[] arr = new int[2*n];for (int j = 0; j < arr.length; j++) {arr[j] = scanner.nextInt();}for (int j = 0; j < k; j++) {arr = wash(arr);}for (int j = 0; j < arr.length; j++) {if(j == arr.length-1) {System.out.println(arr[j]);continue;}System.out.print(arr[j] + " ");}}}public static int[] wash(int[] arr) {int i = 0;int j = arr.length/2;int[] res = new int[arr.length];int index = 0;while (j < arr.length) {res[index] = arr[i];index++;res[index] = arr[j];index++;i++;j++;}arr = res;return arr;}
}

MP3光标位置

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int count = scanner.nextInt();scanner.nextLine();String use = scanner.nextLine();int choice = 1;int pageS = 1;int pageE = 4;if (count <= 4) {char[] useing = use.toCharArray();for (int i = 0; i < useing.length; i++) {if(useing[i] == 'U') {if (choice == 1) {choice = count;}else {choice--;}}else {if(choice == count) {choice = 1;}else {choice++;}}}for (int i = 0; i < count; i++) {if(i == count-1) {System.out.println(i+1);continue;}System.out.print(i+1 + " ");}System.out.println(choice);}else {char[] useing = use.toCharArray();for (int i = 0; i < useing.length; i++) {if(useing[i] == 'U') {if (choice == 1) {choice = count;pageE = count;pageS = pageE - 3;}else if (choice > pageS) {choice--;}else {choice--;pageE--;pageS--;}}else {if(choice == count) {choice = 1;pageS = 1;pageE = pageS+3;}else if (choice < pageE){choice++;}else {choice++;pageE++;pageS++;}}}for (int i = pageS-1; i <= pageE-1; i++) {if(i == pageE-1) {System.out.println(i+1);continue;}System.out.print(i+1 + " ");}System.out.println(choice);}}}
}

Day5

错选择

在 Internet 中实现信息浏览查询服务的是( )
A DNS
B FTP
C WWW
D ADSL

正确答案:C

DNS:域名解析
FTP:文件传输
www:信息查询
ADSL:非对称数字用户线路,数据传输


微信红包

import java.util.*;
public class Gift {public int getValue(int[] gifts, int n) {Arrays.sort(gifts);int i = 0;int j = n/2+1;while(j < n) {if(gifts[i] == gifts[j]) {return gifts[i];}i++;j++;}return 0;}
}

计算字符串的距离

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String str1 = scanner.nextLine();String str2 = scanner.nextLine();int res = calStringDistance(str1,str2); //调用求最小步数函数System.out.println(res);}}//计算最小步数函数public static int calStringDistance(String str1, String str2) {//定义dp数组,行多加一行,列多加一列,因为存放初始状态,用来辅助比较int[][] step = new int[str1.length()+1][str2.length()+1];//初始列:F(i,0) = i(删除操作)for (int i = 0; i < step.length; i++) {step[i][0] = i;}//初始行:F(0,j) = j (插入操作)for (int i = 0; i < step[0].length; i++) {step[0][i] = i;}//开始转换DP动态规划,遍历二维数组for (int i = 1; i < step.length; i++) {for (int j = 1; j < step[0].length; j++) {//如果A[i] == B[j],则不用增加步数,等于上一步 F(i-1,j-1)即可//如果A[i] != B[j],则需要比较三种操作中最小的步数,F(i,j) = min (F(i,j-1) , F(i-1,j) , F(i-1,j-1)) + 1if (str1.charAt(i-1) == str2.charAt(j-1)) {step[i][j] = step[i-1][j-1];}else {step[i][j] = Math.min(Math.min(step[i - 1][j], step[i - 1][j - 1]), step[i][j - 1]) + 1;}}}//返回二维数组DP的右下角,即遍历完两个字符串的最小步数return step[step.length - 1][step[0].length - 1];}
}

Day6

错选择

若一棵二叉树具有12个度为2的结点,6个度为1的结点,则度为0的结点个数是()。
A 10
B 11
C 13
D 不确定

正确答案:C

按节点个数角度考虑:总结点N=N0+N1+N2;
按度数考虑,总度数为节点数-1(除了根节点外,每个节点头上吊着一个度数):N-1=0N0+1N1+2*N2;
两式相减:得出N0=N2+1;


已知小根堆为8,15,10,21,34,16,12,删除关键字 8 之后需重建堆,在此过程中,关键字之间的比较次数是() 。
A 1
B 2
C 3
D 4

正确答案:C

一共比较了3次,见下图


设有向图G=(V,E),顶点集 V={V0,V1,V2,V3},边集 E={<v0,v1>,<v0,v2>,<v0,v3>,<v1,v3>}。若从顶点 V0 开始对图进行深度优先遍历,则可能得到的不同
遍历序列个数是 () 。
A 2
B 3
C 4
D 5

正确答案: D


年终奖

import java.util.*;
public class Bonus {public int getMost(int[][] board) {int[][] dp = new int[board.length][board[0].length];for(int i = 0; i < dp.length; i++) {for(int j = 0; j < dp[0].length; j++) {if(i == 0 && j == 0) {dp[i][j] = board[i][j];}else if(i == 0) {dp[i][j] = dp[i][j-1] + board[i][j];}else if(j == 0) {dp[i][j] = dp[i-1][j] + board[i][j];}else {dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]) + board[i][j];}}}return dp[board.length-1][board[0].length-1];}
}

迷宫问题

import java.util.*;public class Main {public static int min = Integer.MAX_VALUE;  //到达长点最小步骤public static List<int[]> stack = null; //用链表代替栈的功能public static List<List<int[]>> list = null; //链表存放能到达终点的所有路径public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int n = scanner.nextInt();int m = scanner.nextInt();int[][] map = new int[n][m];for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[0].length; j++) {map[i][j] = scanner.nextInt();}}boolean[][] isUsed = new boolean[n][m]; //判断该节点是否走过int count = 1;  //计走的步数stack = new ArrayList<>();  //实例化list = new ArrayList<>();   //实例化dfs(0,0,map,isUsed,count);  //调用函数,深度优先遍历int minStep = Integer.MAX_VALUE;    //最小步数List<int[]> res = null;     //最小步数的所有节点for (int i = 0; i < list.size(); i++) {if (list.get(i).size() < minStep) {minStep = list.get(i).size();res = list.get(i);}}//打印所有步数for (int i = 0; i < res.size(); i++) {System.out.println("(" + res.get(i)[0] + "," + res.get(i)[1] + ")");}}}//回溯法public static void dfs(int i, int j, int[][] map, boolean[][] isUsed,int count) {stack.add(new int[]{i,j});  //每次递归进来都给栈加i,j位置//如果到达了终点,则把之前的所有步位置放到list保存if (i == map.length-1 && j == map[0].length-1) {List<int[]> res = new ArrayList<>(stack);list.add(res);if (count < min) {min = count;}return; //这里回溯,因为有可能不是最小步数}isUsed[i][j] = true;    //该位置变为走过//分别在上下左右进行递归,下一步的位置不能越界,不能走过,不能是墙//上if (i-1 < map.length && i-1 >= 0 && !isUsed[i-1][j] && map[i-1][j] == 0) {dfs(i-1,j,map,isUsed,count+1);}//下if (i + 1 < map.length && !isUsed[i + 1][j] && map[i+1][j] == 0) {dfs(i+1,j,map,isUsed,count+1);}//左if (j-1 < map[0].length && j-1 >= 0 && !isUsed[i][j-1] && map[i][j-1] == 0) {dfs(i,j-1,map,isUsed,count+1);}//右if (j + 1 < map[0].length && !isUsed[i][j + 1] && map[i][j+1] == 0) {dfs(i,j+1,map,isUsed,count+1);}isUsed[i][j] = false;   //回溯后要给走过位置置为为走过stack.remove(stack.size()-1);   //回溯后要给出栈}
}

每日一题 错选择 及 编程题 周总结(四)相关推荐

  1. 百亿题典之C++编程题面试题

    原文地址:百亿题典之C++编程题面试题作者:百亿题典 1. 在linked list中找倒数第N个结点 2. 倒转linked list 3. 二叉树的结点有指向parent的指针,求最近公共祖先 4 ...

  2. python快速编程入门课后程序题答案-Python 入门编程题:1~10(答案)

    Python 入门编程题:1~10(答案) 提示:最好还是先思考,先编写,再看答案哦 ^_^ 1. for i in range(1, 5): for j in range(1,5): for k i ...

  3. java 初级编程题_java基础经典编程题

    java基础经典编程题 Monkey_peach代码 package com.sailor.game; /** * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第 ...

  4. java 编程题_最新JAVA编程题全集(50题及答案)92862

    <最新JAVA编程题全集(50题及答案)92862>由会员分享,可在线阅读,更多相关<最新JAVA编程题全集(50题及答案)92862(32页珍藏版)>请在人人文库网上搜索. ...

  5. pta中java编程题_多文件编程题

    多文件编程题与函数题相似,区别是裁判编写的判题程序可能涉及多个文件,因此不是写在题干里,而是以附件的形式供学生下载,方便学生调试.学生须按照题干上给出的要求编写程序,完成指定功能.学生的提交也可能包含 ...

  6. 2017年3月18日奇虎360 笔试真题(3个编程题)

    360笔试的编程题有3个,前面2个我都提交并AC了,最后一个刚刚写完准备提交然而笔试刚刚结束,实在有些可惜.后来在赛码网提交了,发现也是AC的. 本文中题目来源:赛码网,代码来源:笔试中写的原代码. ...

  7. c语言编程题总结,c语言编程题总结

    c语言编程题总结 1.求100之内自然数中最大的能被17整除的数. 2.已知a,b,c都是1位整数,求当三位整数abc.cba的和为1333时a.b.c的值. 3.计算并输出200-400之间不能被3 ...

  8. c语言编程实践题,C语言实践编程题

    <C语言实践编程题>由会员分享,可在线阅读,更多相关<C语言实践编程题(11页珍藏版)>请在人人文库网上搜索. 1.C语言实践编程题一.分支结构()1. 利用一元二次方程ax ...

  9. c二级语言程序编程题,二级C语言编程题 汇总整理篇.doc

    二级C语言编程题 汇总整理篇 360教育在线 宇创IT培训07年9月内部资料 内部资料,请勿公开传播 三.编程题 考试做题要求: 1.按题目要求编写部分代码,不要改动已经有的代码. 2.在运行时如果遇 ...

最新文章

  1. 多线程:AQS源码分析
  2. 物料自运过帐的模拟和修正
  3. Linux的Nginx报错emerg unknown directive stub_status in
  4. 王牌之作 特斯拉国产Model Y明年初下线
  5. webService学习9:jquery ajax调用webservice
  6. Java中new function另外新建个文件的写法
  7. bzoj 4736: 温暖会指引我们前行 (LCT 维护最大生成树)
  8. c语言 结构体声明和引用、,结构体的声明与自引用
  9. HTML设置单边圆角,如何在html中做圆角矩形和 只有右边的分隔线
  10. 24小时计时器设计logisim_c++日期、时间和计时器
  11. GSON简单实用及常用方法(附 .jar 地址)
  12. sm缩写代表什么意思_PE给水管常见的字母缩写都代表什么?
  13. 如何用iso文件制作U盘启动
  14. c语言召唤窗口,如何设计出高点击率的行为召唤按钮?
  15. criterion of IMAP4.search 限制规范
  16. YonLinker连接集成平台,助力企业实现社会化互联
  17. 网线每根的含义以及类别和距离传输问题
  18. 关于Excel自动换行,不会在西文单词中间换行的问题
  19. 订单可视化(智能制造、流程再造、企业信息化) 第六篇 万事开头难,第一阶段的得与失
  20. 积分体系与会员体系之间的那些事

热门文章

  1. mule esb java实例_基于AnypointStudio IDE开发MuleESB实例
  2. jemter报错:see log file for more details
  3. Codeup墓地-1130
  4. 前端HTMl摩天轮展示
  5. 《淘宝店铺设计装修一册通》一2.3 调整图片
  6. 《企业网络构建与安全管理教程》上册
  7. windows修复SSL漏洞CVE-2016-2183(3389端口)
  8. strcmp函数的使用方法以及模拟
  9. 65W多功能氮化镓扩展坞一体式快充电源CD0205如何实现的
  10. 基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等