努力经营当下,直至未来明朗!
文章目录
- 一、选择
- 二、编程
- 1. 参数解析
- 2. ★跳石板
- 答案
- 1. 选择
- 2. 编程
普通小孩也要热爱生活!
一、选择
- 一个关系数据库文件中的各条记录 ()
A 前后顺序不能任意颠倒,一定要按照输入的顺序排列
B 前后顺序可以任意颠倒,不影响库中的数据关系
C 前后顺序可以任意颠倒,但排列顺序不同,统计处理的结果就可能不同
D 前后顺序不能任意颠倒,一定要按照关键字字段值的顺序排列
- 下列关于视图的说法错误的是
A 视图是从一个或多个基本表导出的表,它是虚表
B 视图一经定义就可以和基本表一样被查询、删除和更新
C 某一用户可以定义若干个视图
D 视图可以用来定义新的视图
- 在Mysql中,订单表 ( 订单号,雇员代号,地区代号,订购日期 ) 中订单号为主键,要删除订单中前三年以前的信息, SQL 为:
A delete from 订单表 where 订购日期<getdate()+3
B delete from 订单表 where 订购日期<DATEADD(yy,3,getdate())
C delete from 订单表 where 订购日期<getdate()-3
D delete from 订单表 where 订购日期<DATEADD(yy,-3,getdate())
- 负责数据库中查询操作的数据库语言是( )。
A 数据定义语言
B 数据管理语言
C 数据操纵语言
D 数据控制语言
- SQL 语句中修改表结构的命令是()
A MODIFY TABLE
B MODIFY STRUCTURE
C ALTER TABLE
D ALTER STRUCTURE
- SQL 查询语句中 WHERE 、 GROUP BY 、 HAVING 这些关键字区别和用法总结错误的是()
A HAVING在查询语句中必须依赖于GROUP BY
B WHERE子句用来限制SELECT语句从表中指定选取的行
C GROUP BY子句用来分组WHERE子句的输出结果集
D HAVING子句用来从分组的结果中筛选列
二、编程
1. 参数解析
参数解析
请编写一个参数解析程序,实现将命令行各个参数解析出来。
解析规则:
1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” "d:“时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将”"去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入
① 数据范围:字符串长度:1≤s≤1000
② 进阶:时间复杂度:O(n) ,空间复杂度:O(n)
2. ★跳石板
跳石板
小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板
答案
1. 选择
- 关系数据库逻辑性强而物理性弱,也就是物理上的顺序并没有很大的影响。所以:关系数据库中的各条记录前后顺序可以任意颠倒,不影响库中数据的关系。
故:选B
- ① 视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。
② 数据库中只存放视图的定义,不存放视图对应的数据,这些数据仍存在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之变化。
③ 视图就是一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。(数据只在基本表中存在)
④ 可以在一个视图之上再定义新的视图,但对视图的更新(增,删,改)操作则有一定的限制。
故:选B
- ① GETDATE() 函数从 SQL Server 返回当前的时间和日期。
② DATEADD() 函数在日期中添加或减去指定的时间间隔。
③DATEADD(datepart,number,date)
date
参数是合法的日期表达式。
number
是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
④ datepart 参数可以是下列的值:
⑤ 具体相关可以参考:SQL相关
故:选D
(前三年是过去时间,所以是负数;年是yy)
- SQL语言分类:(不一定)
① 数据定义语言 (Data Definition Language, DDL) :是SQL语言集中负责数据结构定义与数据库对象定义的语言,由
CREATE、ALTER与DROP
三个语法所组成。② 数据操纵语言(Data Manipulation Language,DML):用户通过它可以实现对数据库的基本操作。如:
insert、update、delete、select
。
③ 数据控制语言(Data Control Language,DCL) :是用来设置或者更改数据库用户或角色 权限 的语句,这些语句包括GRANT、DENY、REVOKE
等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。
④ 事务控制语言(Transaction Control Language,TCL):用于管理数据库中的事务。这些用于管理由 DML 语句所做的更改。它还允许将语句分组为逻辑事务。
TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。
TCL的核心指令为commit、rollback
。
故:选C
- ALTER TABLE 语句用于在已有的表中添加、删除或修改列。所以修改表结构使用的是
alter table
。
故:选C
- 注意SQL语句的执行顺序!
① having只能用在group by之后,对分组后的结果进行筛选,筛选行(即使用having的前提条件是分组)。
② where肯定在group by 之前。
③having在后,where在前!
④ where后的条件表达式里不允许使用聚合函数,而having可以。
⑤ 执行顺序:select--from--where--group by--having--order by
⑥ HAVING 子句用来从分组的结果中筛选行,不是列,列是在select中选择输出的。
故:选D
2. 编程
- 参数解析
1)思路:
① 主要是考察String以及其间隔
② 是以空格以及双引号为间隔的,对于双引号中的空格要特殊处理。
③ 对于双引号做标记flag,最后进行打印的时候就按照标记判断是否打印。
④ 注意统计参数个数的方式:引号外的空格数+1
⑤ 标记flag需要在0/1之间互变,使用按位异或1
2)代码:
// 参数解析
// 以空格作为分隔,引号中的空格要特别注意!
// 统计参数个数:除引号外的空格数+1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
// 统计个数:空格+1,但是注意引号中的空格不算数
int count = 0;
for (int i = 0; i < str.length(); i++) {
// 先判断引号
if(str.charAt(i) == '"') {
// 注意这里使用的是do...while循环
do {
i++;
} while (str.charAt(i) != '"'); // 停止++直到遇到下一个引号
}
// 然后判断空格(顺序不可以颠倒)
if(str.charAt(i) == ' ') {
count++;
}
}
// 输出统计个数
System.out.println(count+1);
// 输出每一个参数:使用flag标记引号
int flag = 1; // 首次遇到引号就变0,再遇到就变1
for (int i = 0; i < str.length(); i++) {
// 先判断是否遇到引号
if(str.charAt(i) == '"') {
// 使用按位异或
flag ^= 1;
}
if (str.charAt(i)!=' ' && str.charAt(i)!='"') {
// 直接进行输出
System.out.print(str.charAt(i));
} else if(str.charAt(i)==' ' && flag==1) {
// 此时说明是真的空格,需要进行换行
System.out.println();
} else if (str.charAt(i)==' ' && flag==0) {
// 引号中的空格,直接继续输出
System.out.print(str.charAt(i));
}
}
}
}
- 跳石板
1)思路:
① 使用“动归”进行解决!
②steps[i]表示到达i号石板所需的最小步数
。初始化为steps容器为INT_MAX。
③ 从序号N的石板开始逐个遍历,若steps[i]为INT_MAX,表示该点不可到达,直接开始下次循环。若steps[i]不为INT_MAX,表示该点可以到达,下面求解编号i的约数,进行动态规划。
③ 动态规划的转移方程为:
- steps[i+j] = min(steps[i]+1,steps[i+j]) //i为石板编号,j为i的约束
- steps[N] = 0
④ 注意:对每一个台阶都要计算其约数进行存储,然后遍历该台阶上的约数进行判断比较。
2)代码:
// 跳石板
// 使用动归解决,还需要对每一级台阶进行约束存储
// 从n跳到m的最小次数
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
// 求约数:不含1和本身K
private static List<Integer> div(int k) {
List<Integer> number = new ArrayList<>();
for (int i = 2; i <= (int) Math.sqrt(k); i++) {
if (k % i == 0) {
// 两个约数都需要!
number.add(i);
if (i != k/i) {
number.add(k/i);
}
}
}
return number;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
// steps[i]表示到到达第i级需要跳的次数!!!
// 首先全部赋值为最大值,表示不可达
int[] steps = new int[m+1];
for (int i = 0; i < m+1; i++) {
steps[i] = Integer.MAX_VALUE;
}
// 然后先将所在的台阶可以跳的次数/约束置0,也就是直接到达
steps[n] = 0;
// 开始从第n个台阶遍历,并计算每个台阶的约数
for (int i = n; i < m; i++) { // 目标台阶不用进行步数统计,因为用不到
if(steps[i] == Integer.MAX_VALUE) { // 表示该级台阶不可达
continue;
}
// 求i的约数:使用链表进行存储,也就是在该级台阶上可以跳的台阶数
List<Integer> number = div(i);
// 遍历该约数链表,进行下一步走位的判断
for (int j : number) {
// j表示在该台阶上可以继续走多少个台阶
// 这里的判断以及条件改变很重要!
// 到新的台阶上的值要进行更新!
if(i+j<=m && steps[i+j]!=Integer.MAX_VALUE) { // 可以直达
steps[i+j] = Math.min(steps[i+j],steps[i]+1);
} else if(i+j<=m) { // 不可以直达,要目前台阶开始跳
steps[i+j] = steps[i]+1;
}
}
}
if (steps[m] == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(steps[m]);
}
}
}