蓝桥杯2020大学B组省赛

1.门派制作

 

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
       int n=2020;
       int count=0;
       while(n!=0){
         int t=n;
         while(t!=0){
           if(t%10==2) count++;
           t/=10;
         }
         n--;
       }
       System.out.println(count);
        scan.close();
    }
}

答案:624 

 2.既约分数

 

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        int count=0;
        for(int i=1;i<=2020;i++){
            for(int j=1;j<=2020;j++){
                if(1==gcd(i,j)) count++;
            }
        }
        System.out.println(count);
    }
    public static int gcd(int i,int j){
        if(i%j==0) return j;
        return gcd(j,i%j);
    }
}

答案:2481215

注意:

①主方法使用了static,则另外一个方法也要有static。

②欧几里得算法求最大公约数。快速求得 a和 b 的最大公约数_codepupil的博客-CSDN博客

3.蛇形填数

 

 

 可知,第n行第n列的数是n^2+(n-1)^2。

import java.util.Scanner;
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
       System.out.println(20*20+19*19);
    }
}

答案:761

4.跑步锻炼

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
       
        int length = 2;//跑步里程,从起始2000.1.1开始算,这一天2km。

         //每个月份的天数
        int[] monthNum = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        //起始2020年1月1日
        int month = 1;
        int day = 1;
        int year = 2000;//年份
        int week = 6;//礼拜
        while(!(year==2020&&month==10&&day==1)){//未到该日期
          if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){//闰年的判定。
             monthNum[2] = 29;
          }else {
             monthNum[2] = 28;
          }
          day++;
          week = (week+1) % 7;//取余获得星期几
          if(day > monthNum[month]){//过去了一个月
            month++;
            day = 1;//天数置为1.
            if(month > 12){//过去了一年
              month = 1;//月数置1
              year++;
            }
          }
          if(day == 1 || week == 1){//每月第一天,每周一
            length++;
          }
          length++;
        }
        System.out.println(length);
        
      
    }
}

 答案:8879

注意:

①如何判定闰年:(year % 4 == 0 && year % 100 != 0) || year % 400 == 0    四年一润,百年不润,四百年一润。

②如何设定每个月的天数:    int[] monthNum = {0,31,28,31,30,31,30,31,31,30,31,30,31};

③:跨年或者跨月:月数或者天数置0,年数或者月数++。

5.七段码

 

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = 7 + 10 + 16 + 20 + 19 + 7 + 1;
        System.out.println(num);
        scan.close();
    }
}

答案:80           硬数

6.成绩统计

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int a = 0, b = 0;
        for(int i = 0; i<n; i++){
          int temp = scan.nextInt();
          if(temp>=60)a++;
          if(temp>=85)b++;
        }
        System.out.println(Math.round((float)a*100/n)+"%");
        System.out.println(Math.round((float)b*100/n)+"%");
        
        scan.close();
    }
}

 注意:四舍五入可以用Math.round()。记得要将int转为float避免除的时候将余数丢弃了。

round() 方法返回一个最接近的 int、long 型值,四舍五入。

round 表示"四舍五入",算法为Math.floor(x+0.5) ,即将原来的数字加上 0.5 后再向下取整,所以 Math.round(11.5) 的结果为 12,Math.round(-11.5) 的结果为 -11。

7.回文日期

 

 8.子串分值和

 

 自己写的:

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str=scan.nextLine();
        int count=0;
        for(int i=0;i<str.length();i++){
            for(int j=i+1;j<=str.length();j++){
                count+=method(str.substring(i,j));
            }
        }
        System.out.println(count);
        scan.close();
    }
    public static int method(String sb){
        char[] arr=sb.toCharArray();
        List<Character> list=new ArrayList<>();
        for(char c:arr){
            if(!list.contains(c))
                list.add(c);
        }
        return list.size();
    }
}

因为是n^2时间复杂度,爆了

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        char[] a=scan.next().toCharArray();
        int[] pre=new int[a.length];
        for(int i=0;i<pre.length;i++){
          int j=i-1;
          while(j>-1&&a[j]!=a[i]){
            j--;
          }
          pre[i]=j;
        }
        long count=0;
        for(int i=0;i<a.length;i++){
          count+=((long)(a.length-i))*((long)(i-pre[i]));
        }
        System.out.println(count);
        scan.close();
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值