2020蓝桥杯java省赛b组

在这里插入图片描述

public class  Main {
    public static void main(String[] args) {
        int sum=0;
        for (int i = 1; i <=2020 ; i++) {
            int j=i;
            while (j!=0)
            {
                int t=j%10;
                if(t==2)
                {
                    sum++;
                }
                j/=10;
            }
        }
        System.out.println(sum);
    }
}

答案:624

在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;

public class  Main {
    public static void main(String[] args) {
        int sum=0;
       char n[][]= new char[300][300];
        for (int i = 0; i <300 ; i++) {
                n[i]=new Scanner(System.in).nextLine().toCharArray();

        }
        for (int i = 0; i < 300; i++) {
            for (int j = 0; j <300 ; j++) {
                if(n[i][j]=='2')
                {
                    if(i+3<300)
                    {
                        if(n[i+1][j]=='0'&&n[i+2][j]=='2'&&n[i+3][j]=='0')
                        {
                            sum++;
                        }
                    }
                    if(j+3<300)
                    {
                        if(n[i][j+1]=='0'&&n[i][j+2]=='2'&&n[i][j+3]=='0')
                        {
                            sum++;
                        }
                    }
                    if(j+3<300&&i+3<300)
                    {
                        if(n[i+1][j+1]=='0'&&n[i+2][j+2]=='2'&&n[i+3][j+3]=='0')
                        {
                            sum++;
                        }
                    }
                }
            }
        }
        System.out.println(sum);
    }
}

答案:16520

在这里插入图片描述

看第1列,1为第134为第21011为第3组,那么可以得出公式:
第n组第一个数=1+2(n-1+5(n-2+(n-2*(n-3*2
根据规律:
第1行第1列是1,第2行第2列是第2组第1个数+2,第3行第3列是第3组第1个数+3
所以第2020列为第20组第1个数+20 

答案:761

在这里插入图片描述在这里插入图片描述

//有点问题,最后得到的是92,还要排除几种情况。。所以我这种方法比较麻烦
import java.util.ArrayList;

public class  Main {
    static ArrayList<String> arr= new ArrayList<>();
    static char[] a = {'a','b','c','d','e','f','g'};
    public static void main(String[] args) {
        int sum=0;
        dfs(1,"",0);
        dfs(0,"",0);
        for (String s:arr)
        {
            if(check(s))
            {
                sum++;
                System.out.println(s);
            }
        }
        System.out.println(sum);
    }
    public static void dfs(int flag,String str,int index)
    {
        if(index==7)
        {
            return;
        }
        if(flag==0)
        {
            dfs(1,str,index+1);
            dfs(0,str,index+1);
        }
        else
        {
            arr.add(str+a[index]);
            dfs(1,str+a[index],index+1);
            dfs(0,str+a[index],index+1);
        }
        return;
    }
    public static boolean check(String s)
    {
        char a[] = s.toCharArray();
        if(a.length==1)
        {
            return true;
        }
        for (int i = 0; i <a.length-1 ; i++) {
            if(a[i]=='a'&&a[i+1]!='b'&&a[i+1]!='f')
            {
                return false;
            }
            if(a[i]=='b'&&a[i+1]!='c'&&a[i+1]!='g')
            {
                if(i>0&&a[i-1]!='a')
                {
                    return false;
                }
            }
            if(a[i]=='c'&&a[i+1]!='g'&&a[i+1]!='d')
            {
                if(i>0&&a[i-1]!='b')
                {
                    return false;
                }
            }
            if(a[i]=='d'&&a[i+1]!='e')
            {
                if(i>0&&a[i-1]!='c')
                {
                    return false;
                }
            }
            if(a[i]=='e'&&a[i+1]!='f'&&a[i+1]>'g')
            {
                if(i!=0&&a[i-1]!='d')
                {
                    return false;
                }
            }
            if(a[i]=='f'&&a[i+1]!='a'&&a[i+1]!='g'&&a[i-1]!='e')
            {
                if(i>0&&a[i-1]!='e')
                {
                    return false;
                }
            }
        }
        return true;
    }
}

答案:80

在这里插入图片描述
在这里插入图片描述
//这道题慢慢试

public class Main {
    public static void main(String[] args) {
        int sum=0;
        String s ="abcdefghijklmn"; //91次
        String s ="abcdefghijklmno";//105次
        String s ="abcdefghijklmon";//104次
        String s ="abcdefghiklmnoj";//100次
        s=new StringBuilder(s).reverse().toString();//加了一个翻转,方便自己去慢慢试
        char[] ch = s.toCharArray();
        for (int i = 0; i <ch.length-1 ; i++) {
            for (int j = 0; j <ch.length-1; j++) {
                if(ch[j]>ch[j+1])
                {
                    sum++;
                    char t=ch[j+1];
                    ch[j+1]=ch[j];
                    ch[j]=t;
                }
            }
        }
        System.out.println(sum);
    }
}

答案: jonmlkihgfedcba

在这里插入图片描述
在这里插入图片描述

样例输入:

7
80
92
56
74
88
99
10

样例输出:

99
10
71.29
这道题不难,属于送分题
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        int max=0,min=999;
        double avg=0;
        for (int i = 0; i <n ; i++) {
            a[i]=sc.nextInt();
        }
        for (int i = 0; i <n; i++) {
            if(a[i]>max)
            {
                max=a[i];
            }
            if(a[i]<min)
            {
                min=a[i];
            }
            avg+=a[i];
        }
        System.out.println(max);
        System.out.println(min);
        System.out.printf("%.2f",avg/n);
    }
}

在这里插入图片描述

样例输入1:

lanqiao

样例输出:

a
2

样例输入2:

longlonglongistoolong

样例输出:

o
6
这道题也挺简单的,出现相同次数的时候我的方法是加入到集合中
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int max=0;
        int a[] = new int[26];
        Scanner sc = new Scanner(System.in);
        String s =sc.next();
        ArrayList<Integer> arr = new ArrayList<>();
        char[] b = s.toCharArray();
        for (int i = 0; i <b.length; i++) {
            a[b[i]-'a']++;
        }
        for (int i = 0; i <a.length; i++) {
            if(max<a[i])
            {
                max=a[i];
            }
        }
        for (int i = 0; i <a.length; i++) {
            if(a[i]==max)
            {
                arr.add(i);
            }
        }
        //若有出现相同的次数,找字典序最小的,即数字最小的
        int min=99;
        for (int i:arr)
        {
            if(min>i)
            {
                min=i;
            }
        }
        System.out.println((char) (min+'a'));
        System.out.println(max);

    }
}

在这里插入图片描述

样例输入:

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出:

27

//这道题用dfs,再用两个参数记录走left与right的次数,小心数组越界
import java.util.Scanner;

public class Main {
    static Scanner sc =new Scanner(System.in);
    static int sum=0;
    static int a[][];
    static int vis[][];
    static int n=sc.nextInt();//n行
    public static void main(String[] args) {
         a = new int[n][n];
         vis=new int[n][n];
        for (int i = 0; i <n; i++) {
            for (int j = 0; j <=i ; j++) {
                a[i][j]=sc.nextInt();
            }
        }
        vis[0][0]=1;
        dfs(0,0,0,0,0);
        System.out.println(sum);
    }
    public static void dfs(int step,int left,int right,int x,int y)
    {
        step+=a[x][y];
        if(x==n-1)
        {
            if(left-right>1||right-left>1)
            {
                return;
            }
            if(sum<step)
            {
                sum=step;

            }
            return;
        }
        if(vis[x+1][y]==0)
        {
            vis[x+1][y]=1;
            dfs(step,left+1,right,x+1,y);
            vis[x+1][y]=0;
        }
        if(vis[x+1][y+1]==0)
        {
            vis[x+1][y+1]=1;
            dfs(step,left,right+1,x+1,y+1);
            vis[x+1][y+1]=0;
        }
        return;
    }
}

在这里插入图片描述

样例输入:

ababc

样例输出:

28

样例说明:

子串     f值
a        1
ab		 2
aba		 2
abab	 2
ababc    3
 b		 1
 ba		 2
 bab	 2
 babc	 3
  a		 1
  ab     2
  abc    3
   b     1
   bc    2
    c    1

在这里插入图片描述

//这道题用哈希表来写会很简单,先把字符串的子串截取出来添加到ArrayList集合,再判断即可
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int sum=0;
        String str =new Scanner(System.in).next();
        ArrayList<String> arr = new ArrayList<>();
        for (int i = 0; i <str.length(); i++) {
            for (int j = i+1; j <=str.length(); j++) {
                arr.add(str.substring(i,j));
            }
        }
        for (String i :arr)
        {
            sum+=pd(i);
        }
        System.out.println(sum);
    }
    public static int pd(String s)
    {
        HashSet<Character> set = new HashSet<>();
        char a[]=s.toCharArray();
        for (int i = 0; i <s.length(); i++) {
            set.add(a[i]);
        }
        return set.size();
    }
}

还有一道暂时放弃。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值