【JAVA刷题】

本文讨论了JAVA中的类重写问题,提供了相关代码示例。同时,文章涵盖了数据库的基本概念,如事务的特性。编程题部分涉及了检查字符串是否由其子串拼接以及全排列生成合法括号字符串的方法。最后,文章提出了解决整数成绩最大化问题的策略,即如何拆分整数以获得最大乘积。
摘要由CSDN通过智能技术生成

遇到的题目

一起学习

数据库理解

下面关于数据库说法正确的是:

A. 不小心drop table删库后,只需执行ctrl+z撤销命令,便可恢复数据
B. 第一范式(1-NF)不允许表中有子表,但BC范式(BC-NF)允许
C. 事务的四个特征是:原子性、一致性、持续性和隔离性
D. 数据库中的主键和外键均可以有多个

答案 C
解析
A项,当采用默认的自动事务时,删除表可以回撤。当开启手动事务,且删除表后提交事务,则不能再回撤;B项,第一范式指的是表中每一个一段不可再分,每一个字段都是独立的;C项,事务的四个基本特性;D项,主键只有一个,约束和在外键可以有多个

JAVA重写问题

下列代码的输出结果是:

public class A { 
        String name="a"; 
        String go(){ 
            return "- function in A"; 
        } 
    } 
    public class B extends A { 
        String name="b"; 
        String go(){ 
            return "- function in B"; 
        } 
    public static void main(String[] args) { 
        A a= new B(); 
        System.out.println(a.name+a.go()); 
        }   
    }

答案 a - function in B
解析
属性不存在重写,只有方法才存在重写

编程题

字符串是否由子串拼接
给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件。

import java.util.Scanner;
public class Main{
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		String str = in.nextLine();
		System.out.println(get(str));
	}
	//暴力寻找重复的子串
	public static String get(String str){
		int len = str.length();
		for(int i=len/2; i>0; i--){
			if(len%i == 0){
				int times = len/i;
				String s = str.substring(0,i);
				StringBuilder sb = new StringBuilder();
				for(int j=0; j<times; j++){
					sb.append(s);
				}
				if(sb.toString().equals(str)){
					return s;
				}
			}
		}
		return "false";
	}
}

寻找合法字符串
给出一个正整数n,请给出所有的包含n个’(‘和n个’)‘的字符串,使得’(‘和’)‘可以完全匹配。
例如:
‘(())()’,’()()()’ 都是合法的;
'())()('是不合法的。
请按照__字典序__给出所有合法的字符串。

//全排列问题要想到DFS,注意递归过程中判断合法性 

	import java.util.ArrayList;

	import java.util.List;

	import java.util.Scanner;

	public class Main{
	    public static void main(String[] args) {
	        Scanner in = newScanner(System.in);
	        int n = in.nextInt();
	        List<String> list = newArrayList<>();
	        DFS(0, 0, n, "", list);
	        for(inti=0;i<list.size()-1;i++){
	            System.out.print(list.get(i)+",");
	        }
	        System.out.println(list.get(list.size()-1));
	    }

	    public static void DFS(intnum1, intnum2, intn, String str, List<String> list) {
	        if(num1==n && num1+num2==2*n) list.add(str);
	        if(num1<n && num1>=num2 && num1+num2<2*n) DFS(num1+1, num2, n, str+'(', list);
	        if(num2<n && num1+num2<2*n) DFS(num1, num2+1, n, str+')', list);
	        return;
	    }
	}

整数成绩最大化
给出一个整数n,将n分解为至少两个整数之和,使得这些整数的乘积最大化,输出能够获得的最大的乘积。
例如:
2=1+1,输出1;
10=3+3+4,输出36。

//n=(多个)(3+3+...+3)+a;(a<3);若a=1;则n=(3+3+...+3)(k-1个)+4;把n拆成多个3相乘可达最大   
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int three = n / 3;
        if (((n - three * 3) & 1) == 1) { three--; }
        int two = (n - three * 3) / 2;
        int result = (int)(Math.pow(3, three) * Math.pow(2, two));
        System.out.println(result);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值