1.一个数分成几份,可以被 3 整除的最大份数。比如 12345 分成12 3 45 结果为3.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
char[] str = s.toCharArray();
int[] arr = new int[str.length];
int res=0;
int sum=0;
for(int i=0; i<arr.length; i++){
arr[i] = str[i]-'0';
}
for(int i=0; i<arr.length; i++){
sum += arr[i];
if(arr[i]%3 == 0){
res++;
sum = 0;
continue;
}
if(sum%3 == 0){
res++;
sum = 0;
}
}
System.out.println(res);
}
}
2.根据x + y = x|y,给定x, 求满足要求的第 k 个 y
3.给定数组[0-9] 和 boll_array[0111011110], 0表示可以输出,也可以不输出, 1必须输出对应位,输出所有可能情况(按字符串升序)
4.n 面筛子,m面有奖,有奖继续掷筛子,没奖结束。输入给定每面分数的数组 s, len(s) = n, 求期望。
数学题, ave_score = sum(s)/n
e = (n-m)/n avg_score (第一次就没奖)+ m/n (avg_score + e) (第一次有奖,相当于从头开始)
化简得到 e = sum(s_array)/n-m
5、
/**
* 求上升子序列和的最大值
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] a = {3,7,1,5,9,4,8};
int n = 7;
int[] sum = new int[n];
for(int i=0;i<n;i++){
sum[i]=a[i];
for(int j=0;j<i;j++){
if (a[j]<a[i])
sum[i]=Math.max(sum[i],sum[j]+a[i]);
}
}
int max_sum=sum[0];
for(int i=1;i<n;i++){
if(sum[i]>max_sum) max_sum=sum[i];
}
System.out.println(max_sum);
}
}