3.1w+
社区成员
第一题 数的分解
思路,三个数从小到大进行分解
我们要预估第一个数肯定小于671,第二个数肯定要小于1009,但其实这个范围大一点点也没关系
然后最后的一个数用来兜底,如果最后一个数反而比第二个小,呢就舍弃
package month_training;
import java.util.Arrays;
public class 数的分解 {
static int[] a = new int[2020];
static int[][] b= new int[10000000][3];
public static void main(String[] args) {
for(int i=1;i<=2019;i++) {
a[i] = i;
}
int count = 0;
for(int i=1;i<=1000;i++) {
for(int j = i+1;j<=1019;j++) {
int k = 2019 - i - j;
if(k>j&&!(String.valueOf(i)+String.valueOf(j)+String.valueOf(k)).contains("2")&&!(String.valueOf(i)+String.valueOf(j)+String.valueOf(k)).contains("4")) {
//b[count][0] = i;
//b[count][1] = j;
//b[count][2] = 2019-i-j;
count++;
}
}
}
System.out.print(count);
}
}
第二题 猜生日
这题但凡正常人应该都会从1900开始搜,主要是数字转换,感觉尽量少用字符串,还是直接乘以十方便
package month_training;
public class 猜年龄 {
public static void main(String[] args) {
int tmp = 600;
int ans = 0;
for(int i = 1900;i<=2010;i++) {
for(int j = 1;j<=30;j++) {
//System.out.print(1);
ans = i*10000 + tmp +j;
if(ans%2012 == 0 && ans%3 == 0 && ans%12 == 0)
{
System.out.println(ans);
}
//System.out.print(ans);
}
}
}
}
第三题 成绩统计
这题主要是四舍五入这玩意很讨厌,要是我实在没想到的话,我就多乘一位,然后取余判断
package month_training;
import java.util.Scanner;
public class 成绩分析 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a= 0;
int b = 0;
int c = 0;
for(int i=0;i<n;i++) {
int tmp = sc.nextInt();
if(tmp >=60) {
a++;
System.out.println(1);
}
if(tmp >= 85) {
b++;
System.out.println(-1);
}
}
System.out.println(Math.round(a*100/(n*1.0))+"%");
System.out.println(Math.round(b*100/(n*1.0))+"%");
}
}
第四题 最大和
dp问题,然后涉及到最小质因子,其实我现在看不太懂质因子为啥那么算了....但是孩子会背
然后就是dp,今天没敲快读,然后超时了俩。
import java.util.Arrays;
import java.util.Scanner;
public class 最大和 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//init(n);
int[] val = new int[n+10];
int[] dp = new int[n+10];
for(int i=0;i<n;i++) {
val[i+1] = sc.nextInt();
dp[i+1] = val[i+1];
//System.out.print(get(i));
}
for(int i=1;i<=n;i++) {
dp[i] = Integer.MIN_VALUE;
}
dp[1] = val[1];
for(int i=1;i<=n;i++) {
for(int j =1;j<=get(n-i);j++) {
dp[i+j] = Math.max(dp[i]+val[i+j], dp[i+j]);
}
}
System.out.println(dp[n]);
}
static int get(int n) {
int ans = 0;
int a = n;
if(a == 1) {
return 1;
}
else {
for(int i = 2 ;i<=a/i;i++) {
if(a%i == 0) {
return i;
}
}
}
return n;
}
}