笔试强训(十三)
目录
- 一、选择题
- 二、编程题
- 2.1 参数解析
- 2.1 题目
- 2.1 题解
- 2.2 跳石板(动态规划)
- 2.2.1 题目
- 2.2.2 题解
一、选择题
(1)一个关系型数据库文件中的各条记录(B)
A.前后顺序不能任意颠倒,一定要按照输入的排列顺序
B.前后顺序可以任意颠倒,不影响库中的数据关系
C.前后顺序可以任意颠倒,但排列顺序不同,统计处理的结果就可能不同
D.前后顺序不能任意颠倒,一定要按照关键字字段值的排列顺序
关系数据库的逻辑性强而物理性弱,因此关系型数据库的各条记录前后顺序可以任意颠倒,不影响库中数据的关系
(2)下列关于视图的说法错误的是(B)
A.视图是从一个或多个基本表导出的表,它是虚表
B.视图一经定义就可以和基本表一样被查询、删除和更新
C.某一用户可以定义若干个视图
D.视图可以用来定义新的视图
视图是计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是视图并不在数据库中以存储的数据值集形式存在。行和列数据来由定义视图的查询所用的表,并且在引用视图时动态生成,视图一经定义后就无法修改
(3)订单表(订单号,雇员代号,地区代号,订购日期)中订单号为主键,要删除订单中前三年以前的信息,SQL为(D)
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())
DATEADD函数在日期中添加或减去指定的时间间隔
语法DATEADD(datepart,number,date)
datepart 的参数范围{yy/yyyy,qq/q,mm/m,dy/y,dd/d,wk/ww,dw/w,hh,mi/n,ss/s,ms,mcs,ns}
number 是希望添加的间隔数
date 参数是合法的日期表达式
(3)负责数据库中查询操作的数据库语言是(C)
A.数据定义语言
B.数据管理语言
C.数据操纵语言
D.数据控制语言
数据定义语言DDL:用来创建数据库中的各种对象:表、视图、索引、同义词、聚簇等 create table/view/index/syn/cluster
数据操纵语言DML:主要负责数据的基本操作,包括查询及增加、删除、修改等操作
数据控制语言DCL:用来授予或回收数据库的某种权限,并控制数据库操纵事务发生的时间及效果,对数据ro’o库实行监视等。例如:grant:授权,rollback to:回退到某一点,rollback:回滚,回滚命令使数据库状态回到上次最后提交的状态,commit:提交
(4)SQL语句中,修改表结构的命令是(C)
A.modify table
B.modify structure
C.alter table
D.alter structure
修改表结构使用的关键字都是alter table 表名,在根据具体修改的语句,如:添加表字段
添加表字段:alter table table_name add 字段名称 字段类型
删除表字段:alter table table_name drop 字段名称
修改表字段:alter table table_name change 旧字段名称 新字段名称 字段类型
alter table table_name modify 字段名称 字段类型
(5)在SQL语句中,哪个语句能校验整数列i的值不小于1不大于10(A)
A.i between 1 and 10
B.i between 0 and 11
C.i in interval(0,11)
D.i in interval(1,10)
当interval作为一个函数时,他被当作一个比较函数,及interval(),例如interval(4,0,1,2,3,4,5,6),则在函数中,第一个数4作为被比较数,后面的数将一次与4比较,并返回小于等于4的个数,故上述的返回结果为5,注意,只有将4后面的数字从小到大排列,interval函数才能正常使用,若排序混乱,可以使用,但会影响最终结果
interval作为关键字时,当interval作为第一个关键字时,表示时间间隔,常用在date_add(),date_sub()函数中,常用于时间的加减法。
查询当前时间之前2个小时的日期:select now()-interval 2 hours
(6)SQL查询语句中where、group by 、having 这些关键字区别和用法总结错误的是(D)
A.having 在查询语句中必须依赖order by
B.where 子句用来限制select 语句从表中指定选取的行
C.group by 子句来分组where 子句的输出结果集
D.having 子句用来从分组的结果中筛选列
having 是分组查询时,在分组后条件过滤。这里的过滤是针对行过滤,不是筛选列
二、编程题
2.1 参数解析
2.1 题目
2.1 题解
思路:本题通过空格和双引号对字符串进行分割,同时对于两个双引号之间的空格也需要被输出,因此我们的做法是利用count变量保存当前遇到的双引号的数量,当遇到空格时,如果count为偶数,说明该空格不在两个双引号之间,如果双引号的数量为奇数,说明该空格在两个双引号之间
代码:
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
//String str="xcopy /s c:\\\\ d:\\\\e\n";
StringBuffer sb=new StringBuffer();
List<String> list=new ArrayList<>();
boolean flag=false;
int count=0;
int ret=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='"'){
count++;
continue;
}
if(str.charAt(i)!=' '){
sb.append(str.charAt(i));
}else {
if(count%2==1){
sb.append(str.charAt(i));
}else {
ret++;
list.add(sb.toString());
sb=new StringBuffer();
}
}
}
list.add(sb.toString());
ret++;
System.out.println(ret);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
2.2 跳石板(动态规划)
2.2.1 题目
2.2.2 题解
思路:建立dp数组,dp[i]的含义就是从N号石板跳到 i 号石板所需的最少步数,因此dp数组的长度是M+1,最后返回dp[M],含义是从N号石板跳到M号石板所需的最少步数,即为题目所求
找出依赖关系:dp[i+j]=Math.min(dp[i+j],dp[i]+1),j为i号石板的约数
具体步骤:找出i 的所有约数,然后更新那几个能到达的位置的最小步数。如果不能到达则更新为此时位置的最小步数 +1。
代码:
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int N=scanner.nextInt();
int M=scanner.nextInt();
int[] dp=new int[M+1];
for(int i=0;i<=M;i++){
dp[i]=Integer.MAX_VALUE;
}
dp[N]=0;
for(int i=N;i<=M;i++){
if(dp[i]==Integer.MAX_VALUE){
continue;
}
List<Integer> list=div(i);
for(int j:list){
if(i+j<=M && dp[i+j]!=Integer.MAX_VALUE){
dp[i+j]=Math.min(dp[i+j],dp[i]+1);
}else if(i+j<=M){
dp[i+j]=dp[i]+1;
}
}
}
if(dp[M]==Integer.MAX_VALUE){
System.out.println(-1);
}else {
System.out.println(dp[M]);
}
}
public static List<Integer> div(int num){
List<Integer> list=new ArrayList<>();
for(int i=2;i*i<=num;i++){ if(num%i==0){
list.add(i);
if(num/i!=i){
list.add(num/i);
}
}
}
return list;
}
}