第十届蓝桥杯大赛个人赛省赛(软件类) Java 大学 C 组
试题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:扫地机器人 评价:难

有时间再做
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。