Live2D

蓝桥杯学习

1,九进制转换成十进制

做错题了,但是也是简单的签到题,

 

import java.util.Scanner;
public class Main{
        public static void main(String[]  args){
                    Scanner sc=new Scanner (System.in);
                     int a=2*1+2*9+0+2*9*9*9;
                     System.out.println(a);'
                }
}

 

2,星期计算

 

星期天

星期一

星期二

星期三

星期四

星期五

星期六

1

2

3

4

5

6

0

下行是sum对应的值,所以当sum={2,3,4,5,6,0}时要+6再与7取余,当sum=1时要+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 a=20;
        int b=22;
        int sum=(int)(Math.pow(a,b)%7);
      if(sum==1){
       System.out.println(sum+6);
       }else System.out.println((sum+6)%7);
        scan.close();
    }
}

3,山

只能暴力解题了,无其他的方法了

利用了StringBuffer和String的转换和int与String之间的转换

<1>int a = 123;

String s = "" + a;   //直接拼接 “”

<2>int a =123;

String s = String.valueOf(a); //调用String的valueOf()方法

<3>int a = 123;

String s = Integer.toString(a);//调用整型包装类Integer的toString()方法

字符串转换成int

  <1>String ch=”123”;

   Int a=Integer.parseint(ch);]

<2>String s = "1234";

int a = Integer.valueOf(s).intValue();

String和StringBuffert之间的转换

<1>StringBuffer s=new StringBuffer(“hello”);

   String ch=s.tostring();

 

package train;

import java.util.Scanner;

public class mou {
    static boolean check(int x){
        String s=String.valueOf(x);
        for(int i=0;i<s.length()/2;i++){
            if(s.charAt(i)!=s.charAt(s.length()-i-1)) return false;
        }
        for(int i=1;i<s.length()/2+1;i++){
            if(s.charAt(i)<s.charAt(i-1)) return false;
        }
        return true;
    }
    public static void main(String [] args){

        int ans=0;
        for(int i=2022;i<=2022222022;i++){
            if(check(i))ans++;
        }
        System.out.println(ans);
    }
}

 

4,字符统计

签到题,

package train;
import java.util.Scanner;
public class test_2 {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        String s= scan.nextLine();
        int []ch=new int[27];
        int max=0;
        for(int i=0;i<s.length();i++){
            ch[(int)s.charAt(i)-65]++;
            if(ch[(int)s.charAt(i)-65]>max){
                max=ch[(int)s.charAt(i)-65];
            }
        }
        for(int i=0;i<27;i++){
            if(ch[i]==max){
                System.out.println((char)(i+65));
            }
        }

    }
}

 

5,最少刷题数

此题有点恶心,起初只以为是签到题,找出中位数然后直接比较大小,然后比中位数小的就可以加到比中位数大即可,到最后全部考虑完毕通过率只有70%,很不能理解,就先这样吧

package train;
import java.util.Scanner;
import java.util.Arrays;
public class test_3 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n;
        n = scan.nextInt();
        int[] a = new int[n];
        int[] b = new int[n];//存储要加多少数
        int[] c = new int[n];//存储输入的数组
        for (int i = 0; i < n; i++) {
            a[i] = scan.nextInt();
            c[i] = a[i];
        }
        Arrays.sort(c);
        int mid;
        mid = c[n / 2];
        int k=0;
        for(int i=0;i<n;i++){
            if(mid==a[i])
                k++;
        }
        if (n % 2 == 0&&k==1) {

            for (int i = 0; i < n; i++) {
                if (a[i] < mid)
                    System.out.print(mid - a[i]);
                else System.out.print("0");
                System.out.print(" ");
            }
        } else {
            for (int i = 0; i < n; i++) {
                if (a[i] < mid)
                    System.out.print(mid - a[i] + 1);
                else System.out.print("0");
                System.out.print(" ");
            }
        }
    }
}

二分方法:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;

public class Main {
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

    static int get() throws Exception {
        in.nextToken();
        return (int) in.nval;
    }

    public static void main(String[] args) throws Exception {
        int n = get();
        int[] a = new int[n];
        final int N = 100000;
        // num[i]为i的个数
        int[] num = new int[N + 1];
        int max = -1;
        for (int i = 0; i < n; ++i) {
            a[i] = get();
            max = Math.max(max, a[i]);
            ++num[a[i]];
        }
        // sum[i]为比i小的个数
        int[] sum = new int[max + 1];
        for (int i = 1; i <= max; ++i) {
            sum[i] = num[i - 1] + sum[i - 1];
        }
        // 比i小的数的个数为sum[i]
        // 比i大的数的个数为n-sum[i]-num[i]
        StringBuilder ans = new StringBuilder();
        for (int i = 0; i < n; ++i) {
            if (n - sum[a[i]] - num[a[i]] <= sum[a[i]]) {
                ans.append("0 ");
            } else {
                // 定义l最后落到应该刷的最少的题目数
                // 不可能取到max+1
                int l = a[i] + 1, r = max, mid;
                while (l <= r) {
                    mid = l + r >> 1;
                    // 比i刷题少的个数要减去当前这个人
                    if (n - (sum[mid] - 1) - (num[mid] + 1) <= sum[mid] - 1)
                        r = mid - 1;
                    else
                        l = mid + 1;
                }
                ans.append((l - a[i]) + " ");
            }
        }
        System.out.println(ans);
    }
}
 

6,求阶乘

先是find一个x查找因子5就可以,一个阶乘有几个因子5,就会有几个尾数零

然后使用二分查找,因为有一个区间在这个区间里面查找k

package train;

import java.util.Scanner;

public class test_4 {
    static long find(long x){
        long res=0;
        while(x!=0){
            res=res+x/5;
            x=x/5;
        }
        return res;
    }
    static void solve(){

    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        long k=sc.nextLong();
        long mid=0;
        long left=1;
        long right=Long.MAX_VALUE-5;
        while(left<=right){
            mid=(left+right)/2;
            if(find(mid)>=k)right=mid-1;
            else left=mid+1;
        }
        System.out.println(find(left)==k?left:-1);
    }
}

 

posted @ 2023-01-14 21:45  dfs的秘密花园  阅读(36)  评论(0)    收藏  举报