49,425
社区成员




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();
}
}