笔试强训SQLday14

一、选择题

1、定义学生、教师和课程的关系模式 S (S#,Sn,Sd,Dc,SA )(其属性分别为学号、姓名、所在系、所在系的系主任、年龄); C ( C#,Cn,P# )(其属性分别为课程号、课程名、先修课); SC ( S#,C#,G) (其属性分别为学号、课程号和成绩),则该关系为( )
A 第二范式
B 第一范式
C 第三范式
D BCNF范式
他的回答: D (错误)
正确答案: A
参考答案
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。目前关系数据库有六种范式:第一范式( 1NF )、第二范式( 2NF )、第三范式( 3NF )、 Boyce-Codd 范式( BCNF )、第四范式( 4NF )和第五范式( 5NF )。满足最低要求的范式是第一范式( 1NF )。在第一范式的基础上进一步满足更多要求的称为第二范式( 2NF ),其余范式以次类推。一般说来,数据库只需满足第三范式( 3NF )就行了。 第一范式:主属性(主键)不为空且不重复,字段不可再分(存在非主属性对主属性的部分依赖)。 第二范式:如果关系模式是第一范式,每个非主属性都没有对主键的部分依赖。 第三范式:如果关系模式是第二范式,没有非主属性对主键的传递依赖和部分依赖。 BCNF 范式:所有属性都不传递依赖于关系的任何候选键。 题目中关系模式满足第二范式,但在关系模式 S 中,学生所在系依赖于学号( S# → Sd ),但系本身确定了系主任( Sd → Dc ),存在传递依赖,不满足第三范式。故本题答案为 A 选项。
2、下面不属于数据库系统特点的是( )
A 数据冗余度高
B 数据具有完整性
C 数据共享性好
D 数据独立性高
他的回答: D (错误)
正确答案: A
参考答案
数据库系统的特点:
数据共享性高,冗余度小;
具有高度的物理独立性和逻辑独立性;
整体结构化,用数据模型描述;
由数据库系统提供数据安全性、完整性、并发控制和恢复能力。
简单说即数据库系统的特点为高共享、低冗余、独立性高、具有完整性等。故本题答案为 A 选项。
3、将实体-联系模型转换为关系模型时,实体之间多对多联系在关系模型中的实现方式是( )
A 建立新的关系
B 建立新的属性
C 增加新的关键字
D 建立新的实体
他的回答: A (正确)
正确答案: A
参考答案
将实体-联系模型转换为关系模型时,一个m:n的联系可以转换为一个独立的关系模式,与该联系相连的各实体的码及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。故本题答案为A选项。
4、关于求和函数,以下说法正确的是()
A sum返回表达式中所有数的总和,因此只能用于数字类型的列
B Avg返回表达式中所有数的平均值,可以用于数字型和日期型的列
C Max和Min可以用于字符型的列
D Count可以用于字符型的列
他的回答: A (正确)
正确答案: A
AVG不能使用日期型,C只能使用数值型,并且不属于求和函数,D可以用于字符型的列,但是不是求和函数。
**5、有三个关系 R 、 S 和 T 如下:
在这里插入图片描述

则由关系 R 和 S 得到关系 T 的操作是( )。**
A 自然连接
B 交
C 除
D 并
他的回答: C (正确)
正确答案: C
参考答案:
如果 S = T/R ,则 S 称为 T 除以 R 的商。在除运算中 S 的域由 T 中那些不出现在 R 中的域所组成,对于 S 中的任一有序组,由它与关系 R 中每个有序组所构成的有序组均出现在关系 T 中。所以本题选择 C 。
如果关系R与S具有相同的属性组B,且该属性组的值相等时的连接称为自然连接,结果关系的属性集合为R的属性并上S减去属性B的属性集合。自然连接也可看作是在广义笛卡尔积RxS中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。

交:关系R与关系S的交运算结果由既属于R又属于S的元组(即R与S中相同的元组)组成一个新关系。如果两个关系没有相同的元组,那么它们的交为空。
6、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)
为( )。

A 课号,成绩
B 学号,成绩
C 学号,课号
D 学号,姓名,成绩
他的回答: C (正确)
正确答案: C
7、关系数据库所采用的数据存放形式是()
A 二维表
B 链表
C 网状
D 二叉树
他的回答: A (正确)
正确答案: A
8、某关系表有:员工(部门编号,部门名称,员工编号,姓名,性别,年龄),则其主码为()。
A 部门编号、员工编号
B 员工编号
C 姓名
D 部门编号
他的回答: C (错误)
正确答案: A
参考答案:
由于一个员工可能属于多个部门(如CEO等),所以主码应该选A。
注意:本题并没有考察是否符合某种范式,请仔细阅读题意,不要自设条件。
9、在使用 limit 子句时,如果没有足够的行,则:
A、MySQL会报错
B 、MySQL将只返回它能返回的那么多行
C、 MySQL将不会返回任何行
他的回答: B (正确)
正确答案: B
10、不属于SQL语句的是()
A 、SELECT
B 、CANCEL
C 、UPDATE
D 、ALTER
他的回答: B (正确)
正确答案:B

二、编程题

【计算日期到天数转换】
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) ,空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天

示例1:
输入
2012
12
31
输出
366
【解题思路】:
用一个数组存放每月的累积天数{31,59, 90, 120, 151, 181, 212,243, 273, 304, 334, 365} 输入的日期天数=
当月的天数 + 当月之前的累积天数 如果包含二月,再去判断是否为闰年,如果是闰年,再加1天即可。

牛客网ACM模式代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt()){
            int a=sc.nextInt();
            int b=sc.nextInt();
            int c=sc.nextInt();
            int sum=0;
            int[] array={31,59, 90, 120, 151, 181, 212,243, 273, 304, 334, 365};
            if(b>=2){
                sum+=array[b-2];
            }
            sum+=c;
            if(b>2){
               if(a%400==0||a%4==0&&a%100!=0){
                sum+=1;
                }
            }
             System.out.print(sum);
        } 
    }
}

**【幸运的袋子】**一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。
输入描述:
第一行输入一个正整数n(n ≤ 1000)
第二行为n个数正整数x (x ≤ 1000)
输出描述:
输出可以产生的幸运的袋子数
示例1:
输入
3
1 1 1
输出
2

【解题思路】:
每次从全集中选择若干元素(小球)组成子集(袋子)。对于任意两个正整数a,b如果满足 a+b>ab,则必有一个数为1.可用数论证明:设a=1+x,b=1+y,则1+x+1+y>(1+x)(1+y),—> 1>xy,则x,y必有一个为0,即a,b有一个为1.推广到任意k个正整数,假设a1,a2,…ak,如果不满足给定条件,即和sum小于等于积pi。如果此时再选择一个数b,能使其满足sum+b > pib,则,b必然为1,且为必要非充分条件。反之,如果选择的b>1,则sum+b <= pib,即a1,a2,…,ak,b不满足给定条件。因此,将球按标号升序排序。每次从小到大选择,当选择到a1,a2,…,ak-1时满足给定条件,而再增加选择ak时不满足条件(ak必然大于等于max(a1,a2,…,ak-1)),继续向后选择更大的数,必然无法满足!此时不必再继续向后搜索。如果有多个1,即当k=1时,sum(1)>pi(1)不满足,但下一个元素仍为1,则可以满足1+1>11, 所以要判断当前ak是否等于1,如果等于1,虽然不能满足,组合的个数不能增加,但是继续向后搜索,仍然有满足条件的可能.对于重复数字,组合只能算一个,要去重。

1、将袋子里的球号排序
2、当一个号码和前面的号码无法组成幸运的袋子,那直接break,因为后面的号码肯定比前面号码数字大于或者等于,也无法构成幸运袋子。
3、当我们返回上层递归的时候,需要回溯,继续计算前面的号码和当前位置后面的号码是否可以构成幸运袋子。
4、特殊情况,当array[i]==1时,1和任何数的和都大于任何数的积。

牛客网ACM模式代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
        int n=sc.nextInt();
        int[] array=new int[n];
        for(int i=0;i<n;i++){
            array[i]=sc.nextInt();
        }
         Arrays.sort(array);
        System.out.println(func(array,n,0,0,1));
        }
    }
    public static int func(int[] array,int n,int pos,int sum,int multi){
        int count=0;
        for(int i=pos;i<n;i++){
            sum+=array[i];
            multi*=array[i];
            if(sum>multi){
              count=count+1+func(array,n,i+1,sum,multi); 
            }else if(array[i]==1){
                count=count+func(array,n,i+1,sum,multi);
            }else{
                break;
            }
            sum=sum-array[i];
            multi=multi/array[i];
            while(i<n-1&&array[i]==array[i+1]){
                i++;
            }
        }
      return count; 
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值