问题一:
求n的阶乘末尾连续0的个数
import java.util.*;
import java.io.*;
import java.text.* ;
import java.math.*;
public class Main
{
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int res = 0;
while(n > 0) {
res += n/5;
n /= 5;
}
System.out.println(res);
} catch (IOException e) {
e.printStackTrace();
}
}
}
问题二:
求两序列的最长公共子串,要求不包含数字
import java.util.*;
import java.io.*;
import java.text.* ;
import java.math.*;
public class Main
{
static ArrayList<String> res = new ArrayList<>();
public static void main(String[] args){
try {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
char[] ch1 = br.readLine().toCharArray();
char[] ch2 = br.readLine().toCharArray();
int n1 = ch1.length;
int n2 = ch2.length;
int[][] dp = new int[n1+1][n2+1];
for(int i = 1; i <= n1; i++) {
for(int j = 1; j <= n2; j++) {
if(ch1[i-1] == ch2[j-1]) dp[i][j] = dp[i-1][j-1] + 1;
else dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
}
}
getStr(dp, ch1, ch2, n1, n2, "");
for(int i = 0; i < res.size(); i++) {
System.out.println(res.get(i));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void getStr(int[][] dp, char[] ch1, char[] ch2, int i, int j, String s) {
if(i == 0 || j == 0) {
res.add(s);
return;
}
if(ch1[i-1] == ch2[j-1]) {
getStr(dp, ch1, ch2, i-1, j-1, ch1[i-1]+s);
}
else if(dp[i-1][j] == dp[i][j-1]) {
getStr(dp, ch1, ch2, i-1, j, s);
getStr(dp, ch1, ch2, i, j-1, s);
}
else if(dp[i-1][j] > dp[i][j-1]) getStr(dp, ch1, ch2, i-1, j, s);
else getStr(dp, ch1, ch2, i, j-1, s);
}
}