当前位置:   article > 正文

48天笔试训练错题——day13

48天笔试训练错题——day13

目录

选择题

1.

2.

3.

4.

5.

6.

7.

8.

编程题

1. 参数解析

2. 跳石板


选择题

1.

关系型数据库中存储的数据,我们只是依赖它们的逻辑性,关系是一定的,查询出来的结果就是确定的,记录前后顺序的颠倒不影响它们之间的关系。

2.

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。

  1. test
  2. create view 视图名字 as select.... -- 可以通过查表来定义视图
  3. -- 可以由视图来定义新的视图
  4. create view test2 as select .... from test

视图和真实的表类似,视图包含一系列带有名称的行和列数据。

但是,视图并不在数据库中以存储的数据值集形式存在。

行和列数据来自由定义视图查询所引用的表,并且在引用视图时动态生成。

视图一经定义就无法修改。视图的使用跟普通表差不多。

3.

4.

5.

有关字段的操作使用的都是 alter table

6.

between and 是闭区间。

7.

in () 表示在 xxx 范围里查询。

8.

where 是分组前的条件过滤,group by 是分组,having 是分组后的过滤,过滤都是针对来进行的。

编程题

1. 参数解析

这题也不难,说了参数间隔是空格,被 "" 引用的内容中的空格不算,所以可以遍历这个字符串,先判断是否为 " ,如果是引号,就计数器++,然后 i 一直往后走直到遇到下一个引号,然后跳过引号和空格,如果不是引号,说明是正常的参数,那么就 i 一直往后走直到遇到空格,说明又是一个参数,count++,i++ 跳过空格,打印的时候也是按照上面思路来。

代码实现:

  1. import java.util.Scanner;
  2. // 注意类名必须为 Main, 不要有任何 package xxx 信息
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner in = new Scanner(System.in);
  6. // 注意 hasNext 和 hasNextLine 的区别
  7. while (in.hasNextLine()) { // 注意 while 处理多个 case
  8. String str = in.nextLine();
  9. print(str);
  10. }
  11. }
  12. public static void print(String str) {
  13. int i = 0;
  14. int len = str.length();
  15. // count 是用来记录参数个数的
  16. int count = 0;
  17. while (i < len) {
  18. if (str.charAt(i) == '"') {
  19. count++;
  20. // 此时说明遇到了一个被""括起来的命令
  21. i++;// 跳过 "
  22. while (i < len && str.charAt(i) != '"') {
  23. i++;
  24. }
  25. i += 2; // 跳过"
  26. } else {
  27. while (i < len && str.charAt(i) != ' ') {
  28. i++;
  29. }
  30. count++;
  31. i++;// 跳过空格
  32. }
  33. }
  34. System.out.println(count);
  35. i = 0;
  36. while (i < len) {
  37. if (str.charAt(i) == '"') {
  38. // 此时说明遇到了一个被""括起来的命令
  39. i++;// 跳过 "
  40. while (i < len && str.charAt(i) != '"') {
  41. System.out.print(str.charAt(i));
  42. i++;
  43. }
  44. i += 2; // 跳过"
  45. System.out.println();
  46. } else {
  47. while (i < len && str.charAt(i) != ' ') {
  48. System.out.print(str.charAt(i));
  49. i++;
  50. }
  51. i++;// 跳过空格
  52. System.out.println();
  53. }
  54. }
  55. }
  56. }

2. 跳石板

可以用动态规划来解。

根据上图,就可以写代码了。

代码实现:

  1. import java.util.*;
  2. // 注意类名必须为 Main, 不要有任何 package xxx 信息
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner in = new Scanner(System.in);
  6. // 注意 hasNext 和 hasNextLine 的区别
  7. while (in.hasNextInt()) { // 注意 while 处理多个 case
  8. int n = in.nextInt();
  9. int m = in.nextInt();
  10. int count = getCount(n, m);
  11. if (count == Integer.MAX_VALUE) {
  12. // 说明到达不了 m
  13. System.out.println(-1);
  14. } else {
  15. System.out.println(count);
  16. }
  17. }
  18. }
  19. public static int getCount(int n, int m) {
  20. int[] dp = new int[m + 1];
  21. // 将dp的每个元素初始化为最大值
  22. for (int i = 0; i < dp.length; i++) {
  23. dp[i] = Integer.MAX_VALUE;
  24. }
  25. // 初始化
  26. dp[n] = 0;
  27. for (int k = n; k <= m; k++) {
  28. if (dp[k] == Integer.MAX_VALUE) {
  29. // 说明这里是到达不了的地方
  30. continue;
  31. }
  32. // 获取 k 的约数
  33. List<Integer> list = div(k);
  34. // 遍历约数
  35. for (int x : list) {
  36. // 首先判断是否是已经存在值了
  37. if (k + x <= m && dp[k + x] != Integer.MAX_VALUE) {
  38. dp[k + x] = Math.min(dp[k + x], dp[k] + 1);
  39. } else if (k + x <= m) {
  40. dp[k + x] = dp[k] + 1;
  41. }
  42. }
  43. }
  44. return dp[m];
  45. }
  46. // 获取约数
  47. public static List<Integer> div(int n) {
  48. List<Integer> ret = new ArrayList<>();
  49. for (int i = 2; i <= Math.sqrt(n); i++) {
  50. if (n % i == 0) {
  51. ret.add(i);
  52. if (n / i != i) {
  53. ret.add(n / i);
  54. }
  55. }
  56. }
  57. return ret;
  58. }
  59. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/864350
推荐阅读
相关标签
  

闽ICP备14008679号