目录
1. 选择题
2. 编程题
2.1 汽水瓶
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
if(n == 0){
return;
}
int num = nums(n);
System.out.println(num);
}
}
private static int nums(int n){
if(n <2){
return 0;
}
int sum = 0;
int empty = n;
while(empty>=3){
sum+= empty/3;
empty = empty%3+empty/3;
}
if(empty == 2){
sum+=1;
}
return sum;
}
}
2.2 查找两个字符串a,b中的最长公共子串
import java.util.*;
public class Main {
public static String getMaxSubstr(String str1, String str2){
char[] arr1 = str1.toCharArray();
char[] arr2 = str2.toCharArray();
int len1 = arr1.length;
int len2 = arr2.length;
//最长子串的起始位置
int start = 0;
//最长子串的长度
int maxLen = 0;
//多增加一行一列,作为辅助状态
//状态: 以a的第i个字符结尾和以b的第j个字符结尾的最长公共子串的长度
int[][] maxSubLen = new int[len1 + 1][len2 + 1];
for(int i = 1; i <= len1; ++i)
{
for(int j = 1; j <= len2; ++j)
{
//如果第i个字符和第j个字符相等,则进行累加
if(arr1[i - 1] == arr2[j - 1])
{
maxSubLen[i][j] = maxSubLen[i - 1][j - 1] + 1;
//更新最长公共子串
if(maxLen < maxSubLen[i][j])
{
maxLen = maxSubLen[i][j];
start = i - maxLen;
}
}
}
}
return str1.substring(start, start + maxLen);
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String str1;
String str2;
while(sc.hasNext()) {
str1 = sc.next();
str2 = sc.next();
//为什么要以短的为主体呢?我们要看清题哈.
if (str1.length() < str2.length())
System.out.println(getMaxSubstr(str1, str2));
else
System.out.println(getMaxSubstr(str2, str1));
}
}
}