试题A:求和 评价:简单

package lanqiao.c10;

import java.util.*;

public class P1 {
	public static void main(String[] args) {
		//answer 元素个数:1761,和为:1905111
		int num=0;
		int total=0;
		Set<Character> list=new HashSet<Character>();
		list.add('2');
		list.add('0');
		list.add('1');
		list.add('9');
		for( int i=1;i<=2019;i++ ) {
			String str=""+i;
			for( int j=0;j<str.length();j++ ) {
				if( list.contains(str.charAt(j)) ) {
					num++;
					total+=i;
					break;
				}
			}
		}
		System.out.println("元素个数:"+num+",和为:"+total);
	}
}

试题B:矩形切割 评价:简单

package lanqiao.c10;

public class P2 {
	public static void main(String[] args) {
		//answer 21
		System.out.println(chat(2019,324));
	}
	public static int chat(int x,int y) {
		if( x==y )return 1;
		int max=x>y?x:y;
		int min=x<y?x:y;
		return 1+chat(max-min,min); 
	}
}

试题C:不同字符串 评价:简单

package lanqiao.c10;

import java.util.HashSet;
import java.util.Iterator;

public class P3B {
	public static void main(String[] args) {
		//answer 100
		HashSet<String> list=new HashSet<String>();
		String str="0100110001010001";
		for( int i =0;i<str.length();i++ ) {
			for( int j=i+1;j<=str.length();j++ ) {
				list.add(str.substring(i,j));
			}
		}
		Iterator<String> iterator=list.iterator();
		while( iterator.hasNext() ) {
			System.out.println(iterator.next());
		}
		System.out.println("个数:"+list.size());
	}
}

试题D:质数 评价:一般

package lanqiao.c10;

public class P4 {
	public static void main(String[] args) {
		//17569
		int i=1;
		int num=0;
		while( num!=2019 ) {
			i++;
			Boolean isFlag=true;
			for( int j=2;j<=Math.sqrt(i);j++ ) {
				if( i%j==0 ) {
					isFlag=false;
					break;
				}
			}
			if( isFlag )num++;
		}
		System.out.println(i);
	}
}

试题E:最大降雨量 评价:一般

答案:34

理解:取中位数即从小到大之后,取中间那个值,想要中位数越大,则需要中位数的右边的值越大,所以按顺序排是最优的。

试题F:旋转 评价:难

package lanqiao.c10;

import java.util.Scanner;

public class P6 {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入行数:");
		int y=scan.nextInt();
		System.out.println("请输入列数:");
		int x=scan.nextInt();
		int[][] arr=new int[x][y];
		for( int i=0;i<y;i++ ) {
			for( int j=0;j<x;j++ ) {
				arr[j][i]=scan.nextInt();
			}
		}
		int[][] newArr=new int[y][x];
		for( int i=0;i<y;i++ ) {
			for( int j=0;j<x;j++ ) {
				newArr[y-1-i][j]=arr[j][i];
			}
		}
		for( int i=0;i<x;i++ ) {
			String str="";
			for( int j=0;j<y;j++ ) {
				str+=newArr[j][i]+" ";
			}
			System.out.println(str.trim());
		}
	}
}

试题G 评价:难

package lanqiao.c10;

import java.util.HashSet;
import java.util.Scanner;

public class P7 {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
//		店家数量
		int salers=scan.nextInt();
//		订单数量
		int order=scan.nextInt();
//		时间
		int time=scan.nextInt();
//		订单列表
		int[][] orders=new int[time][salers];
//		商家分数
		int[] scores=new int[salers];
//		是否优质商家
		HashSet<Integer> isGood=new HashSet<Integer>();
//		将订单列表初始化
		for( int i=0;i<orders.length;i++ ) {
			int[] t=new int[order];
			for( int j=0;j<order;j++ ) {
				t[j]=0;
			}
			orders[i]=t;
		}
//		将订单插入订单列表
		for( int i=0;i<order;i++ ) {
			int tid=scan.nextInt()-1;
			int uid=scan.nextInt()-1;
			orders[tid][uid]++;
		}
//		订单处理
		for( int i=0;i<time;i++ ) {
			for( int j=0;j<salers;j++ ) {
				if( orders[i][j]>0 ) {
					scores[j]+=2*orders[i][j];
				}else {
					scores[j]--;
					if( scores[j]<0 )scores[j]=0;
				}
				if( scores[j]>5 )isGood.add(j);
				else if( scores[j]<=3 )isGood.remove(j);
			}
		}
		System.out.println(isGood.size());
	}
}

试题H:人物相关分析 评价:难

package lanqiao.c10;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class P8 {
	public static void main(String[] args)  throws Exception{
		Scanner scan=new Scanner(System.in);
		int max=scan.nextInt();
		String queryString=new BufferedReader(new InputStreamReader(System.in)).readLine();
		int count=0;
		String[] arr=queryString.split(" |,|\\.|!");
		for( int i=0;i<arr.length;i++ ) {
			if( arr[i].equals("Alice") ) {
				int strLen="Alice".length();
				for( int j=i+1;j<arr.length;j++ ) {
					if( arr[j].equals("Bob") && strLen<max ) {
						count++;
						break;
					}
					strLen+=arr[j].length();
					if( strLen>max ) {
						break;
					}
				}
			}else if( arr[i].equals("Bob") ) {
				int strLen="Bob".length();
				for( int j=i+1;j<arr.length;j++ ) {
					if( arr[j].equals("Alice") && strLen<max ) {
						count++;
						break;
					}
					strLen+=arr[j].length();
					if( strLen>max ) {
						break;
					}
				}
			}
		}
		System.out.println(count);
	}
}

试题I:等差数列 评价:难

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static long diff;
    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int arr[]=new int[n];
        for (int i = 0; i < n; i++) {
            arr[i]=scanner.nextInt();
        }
        Arrays.sort(arr);

        int diff=0;
        for (int i = 0; i <n-1; i++) {
         diff=gcd(diff,arr[i+1]-arr[i]);
        }

        if (diff==0){
            System.out.println(n);
        }
        else {
            long count=0;
            System.out.println((arr[n-1]-arr[0])/diff+1);
        }
    }
    public static int gcd(int a,int b) {//欧几里得算法(辗转相除法)
        return b!=0?gcd(b, a%b):a;//求两个正整数的最大公约数
    }

}
//抄来的

试题J:扫地机器人 评价:难

有时间再做