小莫蓝桥刷题之路(Day11)

纪小莫 2023-03-14 21:08:35

 

1.这道题首先将从1-20210的数转成字符串str,再对其进行循环,循环范围为str.length,将每一个字符串的每一位进行遍历,用str.charAt()的方法来找1,每找到1个1,count++。

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 < 20210; i++) {
            String str=i+"";
            for (int j = 0; j < str.length(); j++) {
                if(str.charAt(j)=='1')
                {
                    count++;
                }
            }
            if(count==2021)
            {
                System.out.println(str);
                break;
            }
        }
        
        scan.close();
    }
}

2.一道简单的动态规划问题。题目首先定义dp[]的含义,然后定义dp[]的初值,由于需要选取最小的一个路径,所以需要用到 Max.min的方法。同时这道题目需要用到辗转相除法求得最大公约数,然后再求最小 公倍数。

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=2021;
     int []dp=new int[n+1];//表示从1-目标结点的最短路径,则dp[2021]为题目所求。
     dp[1]=0;
     for(int i=2;i<=2021;i++){
          dp[i]=Integer.MAX_VALUE;//初始化
     }
     for(int i=1;i<=2020;i++){
       for(int j=i+1;j<=2021&&(j-i)<=21;j++){
    	   
         dp[j]=Math.min(dp[j],dp[i]+zxgbs(i,j));
       }
     }
     System.out.println(dp[2021]);
     scan.close();
 }
 public static int gcd(int a,int b){
        return b!=0 ? gcd(b,a%b):a;//辗转相除法求最大公约数,如果b等于0,则返回a。,如果不等于0继续辗转相除。
 }
 public static int zxgbs(int a,int b){
   return a*b/gcd(a,b);
 }
}

 3.从键盘输入一个字符串,首先将字符串里的每一个字符遍历,所以用到一个for循环,str里的每一个字符减去'A'或者65(因为A的二进制代码为65)。将减去所得的结果归纳到一个数组里面。后面判断数组的最大值来找到出现最多次数的字母。最后再判断数组里最大的值是否唯一,如果不唯一,则输出最大值所在数组位置的字符。

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

public class Main {
 public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     //在此输入您的代码...
     int[]m=new int[26];
     String str;
     str=sc.next();
     
     for(int i=0;i<str.length();i++){
       m[(int)(str.charAt(i)-'A')]++;
     }
     int max=0;
     for(int i=0;i<m.length;i++){
       max=Math.max(max,m[i]);
     }
     for(int i=0;i<m.length;i++){
       if(m[i]==max){
         System.out.print((char)(i+'A'));
       }
     }
     sc.close();
 }
}

 

4. 类似01背包的问题,看的脑壳疼,勉强看懂。

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

public class Main {
 public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     //在此输入您的代码...
     int []sj={0,31,28,31,30,31,30,31,31,30,31,30,31};
     int [][]arr=new int[1010][2];
     boolean [][]pd=new boolean[1010][5010];
     int n=sc.nextInt();
     int m=sc.nextInt();
     int k=sc.nextInt();
     for(int i=1;i<=12;i++){
       sj[i]+=sj[i-1];
     }
     for(int i=1;i<=n;i++){
       arr[i][0]=sj[sc.nextInt()-1]+sc.nextInt();//
       arr[i][1]=sc.nextInt();
     }
     Arrays.sort(arr,1,n+1,Comparator.comparingInt(a->a[0]));
     pd[0][0]=true;
     int l=0;
     int max=0;
     for(int i=1;i<=n;i++){
       while(arr[i][0]-arr[l+1][0]>=k)l++;
       for(int j=0;j<=m;j++){
         pd[i][j]=pd[i-1][j];
         if(j>=arr[i][1]&&pd[l][j-arr[i][1]]==true){
           pd[i][j]=true;
           max=Math.max(max,j);
         }
       }
     }
     System.out.println(max);
     sc.close();
 }
}

 

...全文
17 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,790

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧