📢📢📢大家好啊,我是浅夜,来交今天的作业啦~
📌奇数倍数📌
📄题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
请你找到最小的整数 X 同时满足:
X 是 2019的整倍数;
X 的每一位数字都是奇数。
📌要找的整数一定是2019的整数倍 那我们只需要遍历是2019的整数倍的数就可以啦
📌再写一个判断这个数的数位都是不是奇数就行啦
📗参考代码
public class Main {
public static void main(String[] args) {
for (int i = 2019; ; i += 2019) {
if (check(i)) {
System.out.println(i);
break;
}
}
}
static boolean check(int i) {
while (i > 0) {
if (i%2 == 0) return false;
i /= 10;
}
return true;
}
}
📍求值📍
📄题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
学习了约数后,小明对于约数很好奇,他发现,给定一个正整数 t,总是可以找到含有个约数的整数。小明对于含有 t 个约数的最小数非常感兴趣,并把它定义为 St 。
例如 1=1,2=2,3=4,4=6,⋅⋅⋅S1=1,S2=2,S3=4,S4=6,⋅⋅⋅ 。
现在小明想知道,当 t=100 时,St 是多少?即 S100 是多少?
❓思路分享
📍题目就是在考🐔(质因)子 遍历找🐔为50的数即可
📍因为线性筛只找到一半的因数 所以这里是50
📗参考代码
public class Main {
public static void main(String[] args) {
for (int i = 2; ; i++) {
int ans = 0;
for (int j = 1; j < i / j; j++) {//根据唯一分解定理 只需要遍历到根号i
if (i % j == 0) ans++;
}
if (ans == 50) {
System.out.println(i);
return;
}
}
}
}
🔖求和🔖
📄问题描述
给定 n 个整数 1,2,⋅⋅⋅,a1,a2,⋅⋅⋅,an ,求它们两两相乘再相加的和,即:
S=a1⋅a2+a1⋅a3+⋯+a1⋅an+a2⋅a3+⋯+an−2⋅an−1+an−2⋅an+an−1⋅an
🔑输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数 1,2,⋯,a1,a2,⋯,an。
🔒输出格式
输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。
❓思路分享
求两两相乘再相加的和 公式:S=a1⋅a2+a1⋅a3+⋯+a1⋅an+a2⋅a3+⋯+an−2⋅an−1+an−2⋅an+an−1⋅an 我们对这串式子提公因式得到:S = a1(a2 + ... + an) + a2(a3 + ... + an) + ... + an-2(an-1 + an) + an-1 *an
这n个数两两相乘 那么对于ai 来讲,是不是要求它与前i-1个数的乘积再求和 这样我们只需要遍历ai ,求ai 乘以前i-1项的和然后累加即可!
📄参考代码
public class Main {
static int N = 200010;
static long[] a = new long[N];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
}
long ans = 0;//保存结果
long sum = 0;//保存前i-1项的和
for (int i = 1; i <= n; i++) {
ans += a[i] * sum;
sum += a[i];
}
System.out.println(ans);
}
}
🎒数位排序🎒
📄问题描述
小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。
例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位 之和 13 。
又如, 6 排在 2022 前面, 因为它们的数位之和相同, 而 6 小于 2022 。
给定正整数 n,m, 请问对 1 到 n 采用这种方法排序时, 排在第 m 个的元 素是多少?
🔑输入格式
输入第一行包含一个正整数 n 。
第二行包含一个正整数 m 。
🔒输出格式
输出一行包含一个整数, 表示答案。
❓思路分享
🎒定义一个方法用来求数位和
🎒自定义排序按照规则(两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面)来排序
有一说一这个自定义排序还是不熟练,看着梗佬(执梗)的代码才勉强改出来哈哈哈
📗参考代码
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
//自定义排序需要用 Integer[]
Integer[] a = new Integer[n];
for (int i = 0; i < n; i++) a[i] = i + 1;
//自定义排序
Arrays.sort(a, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
int a = check(o1);
int b = check(o2);
if (a != b) return a - b;
else return o1 - o2;
}
});
System.out.println(a[m - 1]);
}
//求数位和
private static int check(Integer x) {
int res = 0;
while (x != 0) {
res += x % 10;
x /= 10;
}
return res;
}
}
📢📢📢好啦 今天的打卡分享就是这些了 我们明天再见!