package Java2022;
import java.math.BigInteger;
public class 星期计算 {
public static void main(String[] args) {
BigInteger num = new BigInteger("20");
BigInteger ans = new BigInteger("1");
for(int i=1;i<=22;i++) {
ans=ans.multiply(num);
}
System.out.println(ans);
System.out.println(ans.mod(new BigInteger("7")));
}
}
//注意:这里周六加1 故最后是7即周日
#2.山
答案:3138
因为只是个填空题,可以暴力枚举,判断是否为回文数(字符串翻转和原串相同)以及前n/2是否满足递增
public class 山 {
public static void main(String[] args) {
long ans=0;
for( long i=2022;i<=2022222022;i++) {
if(check(i)) {
ans++;
}
}
System.out.println(ans);
}
public static boolean check(long i) {
String string =String.valueOf(i);
StringBuffer sBuilder = new StringBuffer(string);
if(string.compareTo(sBuilder.reverse().toString())==0) {// 判断是不是回文数
for(int j=0;j<string.length()/2;j++) { // 判断前半部分即可
int pre=Integer.valueOf(string.charAt(j));
int aft=Integer.valueOf(string.charAt(j+1));
if(aft<pre) { // 判断前部分是否是递增的
return false;
}
}
System.out.println(i);
return true;
}
return false;
}
}
package Java2022;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class 字符统计 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string =scanner.next();
Map<Character, Integer> map = new HashMap<>();
int ans_count=0;
for(int i=0;i<string.length();i++) {
char c=string.charAt(i);
if(map.get(c)==null) {
map.put(c, 1);
}else {
map.put(c,map.get(c)+1);
}
if(map.get(c)>ans_count) {
ans_count=map.get(c);//记录出其中出现的最多的字母
}
}
Set<Character> ansCharacters = new TreeSet<>();
//Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也就是一个Entry)
//Map.Entry里面包含getKey()和getValue()方法
for(Map.Entry<Character, Integer> entry:map.entrySet()) {
if(entry.getValue()==ans_count) {
ansCharacters.add(entry.getKey());
}
}
for(Character c: ansCharacters) {
System.out.print(c);
}
}
}
import java.util.Arrays;
import java.util.Scanner;
public class 最少刷题数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] ia = new int[N];
int[] ia2 = new int[N];
for (int i = 0; i < N; i++) {
ia[i] = sc.nextInt();
ia2[i] = ia[i];
}
Arrays.sort(ia2);
for (int i = 0; i < N; i++) {
if (ia[i] >= ia2[N / 2])
System.out.print(0 + " ");
else if (ia2[N / 2] == ia2[N / 2 + 1])
System.out.print(ia2[N / 2] - ia[i] + " ");
else
System.out.print(ia2[N / 2] - ia[i] + 1 + " ");
}
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/7925e05134f442069bea8fb2fb53aa94.png
#5.求阶乘
import java.util.Scanner;
public class 求阶乘 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num=sc.nextInt();
long a=1;
int b=0;
for(long i=1;;i++) {
a=a*i;
while(a%10==0) {
System.out.println(a);
b++;
a=a/10;
}
a=a%10000000;
if(b>num) {
System.out.println(-1);
break;
}
if(b==num) {
System.out.println(i);
break;
}
}
}
}
package Java2022;
import java.util.Scanner;
public class 最大子矩阵 {
static int[][] arr;
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int N=sc.nextInt();
int M=sc.nextInt();
arr = new int[N][M];
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
arr[i][j]=sc.nextInt();
}
}
int limit =sc.nextInt();
int max_are=Integer.MIN_VALUE;
for(int i=N;i>0;i--) {
for(int j=M;j>0;j++) {// i*j
for(int x=0;x<=N-i;x++) {
for(int y=0;y<=M-j;y++) {
int max=find_max(i, j, x, y);
int min=find_min(i, j, x, y);
if((max-min)<=limit) {
max_are=Math.max(max_are, i*j);
}
}
}
}
}
System.out.println(max_are);
}
private static int find_min(int i, int j, int x, int y) {
// TODO //寻找最小值
int res = Integer.MAX_VALUE;
for(int n=x;n<x+i;n++) {
for(int m=y;m<y+j;m++) {
res = Math.min(res, arr[n][m]);
}
}
return res;
}
private static int find_max(int i, int j, int x, int y) {
// TODO 寻找最大值
int res = Integer.MIN_VALUE;
for(int n=x;n<x+i;n++) {
for(int m=y;m<y+j;m++) {
res = Math.max(res, arr[n][m]);
}
}
return res;
}
}
import java.util.Scanner;
public class 数组切分 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] arr=new int[100001];
int sum=1;//每个单独的数为一种存法如{1}{3}{2}{4};
for (int i=1;i<=n;i++){
arr[i]=sc.nextInt();
}
for(int i=1;i<n;i++) {
for(int j=i+1;j<=n;j++) {
int []num=new int[j+1];//从i到j进行复制,num用于存放复制的数据
for (int k=i;k<=j;k++){
num[k]=arr[k];
}
int max=num[i],min=num[i];//max与min分别为这些数中最大数和最小数
for (int k=i;k<=j;k++){
if (min>num[k])min=num[k];
if (max<num[k])max=num[k];
}
if(max-min==j-i) {
sum++;
}
}
}
System.out.println(sum);
}
}