1、奇数倍数
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static int x = 0;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
for(int i = 2019;;i++){
if(i%2019==0&&isres(i)){
System.out.println(i);
return;
}
scan.close();
}
}
public static boolean isres(int i){
while(i!=0){
if(i%10%2==0){
return false;
}
i/=10;
}
return true;
}
}
2、求值
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = 0;
for(int i=10000;;i++){
int count = 0;
for(int j=1;j<=Math.sqrt(i);j++){
if(i%j==0){
count++;
}
}
if(count*2 == 100){
num = i;
break;
}
}
System.out.println(num);
}
}
3、求和
在这里因为数据很大,其实可以使用long,但我习惯是使用大数类,要注意使用Integer.parseInt()进行转换来满足BigInteger.valueOf()的转换条件。
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(reader.readLine());
//int n = reader.read();
BigInteger sum=new BigInteger("0");
BigInteger res=new BigInteger("0");
BigInteger[] nums=new BigInteger[n];
String[]str = reader.readLine().split(" ");
for (int i = 0; i<n; i++) {
//nums[i]=nums[i].add(BigInteger.valueOf(sc.nextInt()));
nums[i]=BigInteger.valueOf(Integer.parseInt(str[i]));
sum=sum.add(nums[i]);
}
for (int i = 0; i<n-1; i++) {
sum=sum.subtract(nums[i]);
res=res.add(sum.multiply(nums[i]));
}
System.out.println(res);
}
}
4、数位排序
这道题学到了一些以前不知道的东西,想要改变默认的排列顺序,不能使用基本类型(int double,char...),所以这里用了Integer类。
Arrays.sort(数组,起始位置,终止位置,new Comparator<>(){
});
注意这里是对起始位置到终止位置-1进行排序.
题目:
问题描述
小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。
例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位 之和 13 。
又如, 6 排在 2022 前面, 因为它们的数位之和相同, 而 6 小于 2022 。
给定正整数 n,m, 请问对 1 到 n 采用这种方法排序时, 排在第 m 个的元素是多少?
输入格式
输入第一行包含一个正整数 n 。
第二行包含一个正整数 m 。
输出格式
输出一行包含一个整数, 表示答案。
样例输入
13
5
样例输出
3
样例说明
1 到 13 的排序为: 1,10,2,11,3,12,4,13,5,6,7,8,91,10,2,11,3,12,4,13,5,6,7,8,9 。第 5 个数为 3 。
评测用例规模与约定
对于 30%的评测用例, 1≤m≤n≤300 。
对于 50%的评测用例, 1≤m≤n≤1000 。
对于所有评测用例, 1m≤n≤10^6。
运行限制
- 最大运行时间:3s
- 最大运行内存: 512M
import java.util.*;
import java.io.*;
import java.math.*;
public class Main{
public static int N = 1000010;
public static Integer []nums = new Integer[N];
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(reader.readLine());
int m = Integer.parseInt(reader.readLine());
for(int i =0;i<n;i++){
nums[i] = i+1;
}
Arrays.sort(nums,0,n,new Comparator<Integer>(){
@Override
public int compare(Integer o1,Integer o2){
int num1 = sum(o1);//求数位和
int num2 = sum(o2);
if(num1<num2){
return -1;
}
if(num1>num2){
return 1;
}
return o1-o2;//相等情况按数值排序
}
});
writer.println(nums[m-1]);
writer.flush();
reader.close();
}
public static int sum(int n){
int res = 0;
while(n>0){
res+=n%10;
n/=10;
}
return res;
}
}