🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!欢迎志同道合的朋友一起加油喔🤺🤺🤺
目录
一、选择题
二、编程题
🔥计算日期到天数转换
🔥幸运的袋子
一、选择题
1、定义学生、教师和课程的关系模式 S (S#,Sn,Sd,Dc,SA )(其属性分别为学号、姓名、所在系、所在系的系主任、年龄); C ( C#,Cn,P# )(其属性分别为课程号、课程名、先修课); SC ( S#,C#,G) (其属性分别为学号、课程号和成绩),则该关系为( )
A 第二范式
B 第一范式
C 第三范式
D BCNF范式
正确答案: A
参考答案:
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。目前关系数据库有六种范式:第一范式( 1NF )、第二范式( 2NF )、第三范式( 3NF )、 Boyce-Codd 范式( BCNF )、第四范式( 4NF )和第五范式( 5NF )。满足最低要求的范式是第一范式( 1NF )。在第一范式的基础上进一步满足更多要求的称为第二范式( 2NF ),其余范式以次类推。一般说来,数据库只需满足第三范式( 3NF )就行了。 第一范式:主属性(主键)不为空且不重复,字段不可再分(存在非主属性对主属性的部分依赖)。 第二范式:如果关系模式是第一范式,每个非主属性都没有对主键的部分依赖。 第三范式:如果关系模式是第二范式,没有非主属性对主键的传递依赖和部分依赖。 BCNF 范式:所有属性都不传递依赖于关系的任何候选键。 题目中关系模式满足第二范式,但在关系模式 S 中,学生所在系依赖于学号( S# → Sd ),但系本身确定了系主任( Sd → Dc ),存在传递依赖,不满足第三范式。故本题答案为 A 选项。
2、下面不属于数据库系统特点的是( )
A 数据冗余度高
B 数据具有完整性
C 数据共享性好
D 数据独立性高
正确答案: A
参考答案:
数据库系统的特点:
数据共享性高,冗余度小;
具有高度的物理独立性和逻辑独立性;
整体结构化,用数据模型描述;
由数据库系统提供数据安全性、完整性、并发控制和恢复能力。
简单说即数据库系统的特点为高共享、低冗余、独立性高、具有完整性等。故本题答案为 A 选项。
3、将实体-联系模型转换为关系模型时,实体之间多对多联系在关系模型中的实现方式是( )
A 建立新的关系
B 建立新的属性
C 增加新的关键字
D 建立新的实体
正确答案: A
参考答案:
将实体-联系模型转换为关系模型时,一个m:n的联系可以转换为一个独立的关系模式,与该联系相连的各实体的码及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。故本题答案为A选项。
4、关于求和函数,以下说法正确的是()
A sum返回表达式中所有数的总和,因此只能用于数字类型的列
B Avg返回表达式中所有数的平均值,可以用于数字型和日期型的列
C Max和Min可以用于字符型的列
D Count可以用于字符型的列
正确答案: A
AVG不能使用日期型,C只能使用数值型,并且不属于求和函数,D可以用于字符型的列,但是不是求和函数。
5、有三个关系 R 、 S 和 T 如下:
则由关系 R 和 S 得到关系 T 的操作是( )。
A 自然连接
B 交
C 除
D 并
正确答案: 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
7、关系数据库所采用的数据存放形式是()
A 二维表
B 链表
C 网状
D 二叉树
正确答案: A
8、某关系表有:员工(部门编号,部门名称,员工编号,姓名,性别,年龄),则其主码为()。
A 部门编号、员工编号
B 员工编号
C 姓名
D 部门编号
正确答案: A
参考答案:
由于一个员工可能属于多个部门(如CEO等),所以主码应该选A。
注意:本题并没有考察是否符合某种范式,请仔细阅读题意,不要自设条件。
9、在使用 limit 子句时,如果没有足够的行,则:
A、MySQL会报错
B 、MySQL将只返回它能返回的那么多行
C、 MySQL将不会返回任何行
正确答案: B
10、不属于SQL语句的是()
A 、SELECT
B 、CANCEL
C 、UPDATE
D 、ALTER
正确答案:B
二、编程题
🔥计算日期到天数转换
计算日期到天数转换_牛客题霸_牛客网
【解题思路】:
用一个数组存放每月的累积天数{31,59, 90, 120, 151, 181, 212,243, 273, 304, 334, 365} 输入的日期天数=
当月的天数 + 当月之前的累积天数 如果包含二月,再去判断是否为闰年,如果是闰年,再加1天即可。
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);
}
}
}
🔥幸运的袋子
幸运的袋子_牛客题霸_牛客网
【解题思路】:
每次从全集中选择若干元素(小球)组成子集(袋子)。对于任意两个正整数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和任何数的和都大于任何数的积。
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;
}
}