笔试强训(十三)

一、选择题

(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;
   }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值