请问十六进制数 2021ABCD 对应的十进制是多少?
539077581
import java.math.*;
public class Main {
public static void main(String[] args) {
String str=new BigInteger("2021ABCD",16).toString(10);
System.out.println(str);
}
}
如果一个整数 M 同时是整数 A 和 B 的倍数,则称 M 是 A 和 B 的公倍数,公倍数中最小的一个正整数称为最小公倍数。
例如:2021 和 86 的最小公倍数是 4042。
请问在 1(含) 到 2021(含) 中,有多少个数与 2021 的最小公倍数是 4042。
3
public class Main {
public static void main(String[] args) {
int ans=0;
for(int i=1;i<=2021;i++) {
if(f(i,2021)==4042) {
ans++;
System.out.println(i);
}
}
System.out.println(ans);
}
public static int gcd(int a,int b) {
if(b==0)return a;
return gcd(b,a%b);
}
public static int f(int x,int y) {
return x*y/gcd(x,y);
}
}
10 是一个非常特殊的数,它可以表示成两个非负整数的平方和,10 = 3 * 3 + 1 * 1。
9 也是同样特殊的数,它可以表示成 9 = 3 * 3 + 0 * 0。
请问,在 1 到 2021 中有多少个这样的数?
请注意,有的数有多种表示方法,例如 25 = 5 * 5 + 0 * 0 = 3 * 3 + 4 * 4,在算答案时只算一次。
624
public class Main {
public static void main(String[] args) {
int ans=0;
for(int i=1;i<=2021;i++) {
if(check(i)) {
ans++;
}
}
System.out.println(ans);
}
public static boolean check(int n) {
for(int i=0;i<=99;i++) {
for(int j=0;j<=99;j++) {
if(i*i+j*j==n) {
return true;
}
}
}
return false;
}
}
下面是一个8个结点的无向图的邻接矩阵表示,其中第 i 行第 j 列表示结点 i 到结点 j 的边长度。当长度为 0 时表示不存在边。
0 9 3 0 0 0 0 9
9 0 8 1 4 0 0 0
3 8 0 9 0 0 0 0
0 1 9 0 3 0 0 5
0 4 0 3 0 7 0 6
0 0 0 0 7 0 5 2
0 0 0 0 0 5 0 4
9 0 0 5 6 2 4 0
请问,这个图的最小生成树大小的多少?
下面是一个20*20的矩阵,矩阵中的每个数字是一个1到9之间的数字,请注意显示时去除了分隔符号。
69859241839387868941
17615876963131759284
37347348326627483485
53671256556167864743
16121686927432329479
13547413349962773447
27979945929848824687
53776983346838791379
56493421365365717745
21924379293872611382
93919353216243561277
54296144763969257788
96233972513794732933
81443494533129939975
61171882988877593499
61216868895721348522
55485345959294726896
32124963318242554922
13593647191934272696
56436895944919899246
矩阵中一个子矩阵的值是指子矩阵中所有数值的和。
请问,矩阵中值最大的一个 5 * 5 的子矩阵的值是多少?
154
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int max=Integer.MIN_VALUE;
int[][] a=new int[20][20];
for(int i=0;i<20;i++) {
String str=scan.next();
for(int j=0;j<20;j++) {
a[i][j]=str.charAt(j)-'0';
}
}
for(int i=5;i<20;i++) {
for(int j=5;j<20;j++) {
int sum=0;
for(int a1=i-5;a1max) {
max=sum;
}
}
}
System.out.println(max);
}
}
小蓝要写一个网页显示一些商品。
商品总共有 t 个,按顺序由 1 到 t 编号,每页显示 a 个,请问第 p 页显示的最小和最大编号是多少?
输入一行包含三个整数 t、a、p,相邻整数之间用一个空格分隔。
输出一行包含两个整数,分别表示最小和最大编号。
样例输入
31 10 3
样例输出
21 30
样例输入
31 10 4
样例输出
31 31
对于所有评测用例,1 <= t <= 1000,1 <= a <= 100,1 <= p。保证第 p 页至少显示一个商品
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int t=scan.nextInt();
int a=scan.nextInt();
int p=scan.nextInt();
int count=0;
for(int i=1;i<=t;i=i+a) {
count+=1;
int j=i+a-1;
if(count==p) {
if(j=t) {
System.out.println(i+" "+t);
}
}
}
}
}
给定一个正整数 n,请判断 n 的所有数位上的值是否从左到右是严格递增的。
例如:1589 是严格递增的 。
再如:1336 不是严格递增的,中间有相同的 3。
再如:1598 不是严格递增的。
输入一行包含一个正整数 n。
如果是严格递增的,输出“YES”(全大写),否则输出“NO”(全大写)。
样例输入
1589
样例输出
YES
样例输入
1336
样例输出
NO
对于所有评测用例,1 <= n <= 1000000000。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n =scan.nextInt();
int count=0;
String str=String.valueOf(n);
for(int i=1;i0) {
System.out.println("NO");
}
else {
System.out.println("YES");
}
}
}
小蓝将自己的车停在路边,在同一天将车开走。给定停车时间和开走时间,请问小蓝停了多长时间?
输入两行,第一行包含停车时间,第二行包含开走时间。
每个时间的格式为 HH:MM:SS,其中 HH 表示时,值为 0 到 23 的整数,如果小于 10 用 0 补齐两位;MM 和 SS 分别表示分和秒,值为 0 到 59 的整数,小于 10 时用 0 补齐两位。
输出总共停车的时间,格式为 HH:MM:SS。
样例输入
08:58:10
17:20:31样例输出
08:22:21
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String str1=scan.next();
String str2=scan.next();
String[] a=new String[3];
String[] b=new String[3];
a=str1.split(":");
b=str2.split(":");
int hour=0;
int min=0;
int s=0;
if(Integer.parseInt(b[2])>Integer.parseInt(a[2])) {
s=Integer.parseInt(b[2])-Integer.parseInt(a[2]);
}
else {
b[1]=Integer.parseInt(b[1])-1+"";
s=Integer.parseInt(b[2])+60-Integer.parseInt(a[2]);
}
if(Integer.parseInt(b[1])>Integer.parseInt(a[1])) {
min=Integer.parseInt(b[1])-Integer.parseInt(a[1]);
}
else{
min=Integer.parseInt(b[1])+60-Integer.parseInt(a[1]);
b[0]=Integer.parseInt(b[0])-1+"";
}
hour=Integer.parseInt(b[0])-Integer.parseInt(a[0]);
System.out.printf("%02d"+":"+"%02d"+":"+"%02d",hour,min,s);
}
}
n 个运动员参加一个由 m 项运动组成的运动会,要求每个运动员参加每个项目。
每个运动员在每个项目都有一个成绩,成绩越大排名越靠前。每个项目,不同运功员的成绩不会相同,因此排名不会相同。(但是不同项目可能成绩会相同)
每个项目的前 k 名分别获得 k 到 1 分,第 i 名获得 max(k+1-i, 0) 分。
每个运动员的总分就是他在每个项目上获得的分数之和。
请计算每个运动员的总分。
输入的第一行包含两个整数 n, m, k,用一个空格分隔。
接下来 n 行,每行包含 m 个整数,第 i 行第 j 个整数表示第 i 个运动员在第 j 项比赛的成绩。
输出一行包含 n 个整数,依次表示每个运动员的总分,相邻的整数之间用一个空格分隔。
样例输入
3 5 2
5 3 1 5 12
2 4 2 34 1
8 6 3 2 2样例输出
4 4 7
样例说明
第 1 个运动员得分为:1+0+0+1+2=4
第 2 个运动员得分为:0+1+1+2+0=4
第 3 个运动员得分为:2+2+2+0+1=7
对于 50% 的评测用例,2 <= n, m, k <= 20,0 <= 成绩 <= 1000。
对于所有评测用例,2 <= n, m, k <= 100,0 <= 成绩 <= 10000。
import java.util.*;
public class Main {
static int k=0;
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int m=scan.nextInt();
k=scan.nextInt();
int num=1;
int max=Integer.MIN_VALUE;
int[][] a=new int[n][m];//n位运动员m项成绩
int[] b=new int[n];//这n位运动员第m项成绩
int[] sum=new int[n];//总成绩
for(int i=0;imax) {
max=b[k];
}
}
for(int s=0;smax) {
max=b[k];
}
}
for(int s=0;s
给定 n 个整数 a[1], a[2], …, a[n],小蓝希望在中间选出一部分,满足以下两个条件:
1、对于某个下标集合 S,选出的数中有至少 k 个下标在集合 S 中;
2、选出的数按照原来的顺序排列,是严格单调上升的,即选出的是一个上升子序列。
请问小蓝最多能选出多少个数。
输入的第一行包含两个整数 n, k,用一个空格分隔。
第二行包含 n 个整数 a[1], a[2], …, a[n],相邻的整数间用空格分隔。
第三行包含一个长度为 n 的01串,依次表示每个下标是否在集合 S 中,为 0 表示不在 S 中,为 1 表示在 S 中。
输出一行包含一个整数,表示答案。如果没有满足条件的选法,输出-1。
样例输入
8 2
8 1 2 3 9 4 7 10
10001010样例输出
3
由于 8、9、7 三个数中至少要选 2 个,只能选 8 和 9,剩下的数只能选最后一个数 10。
样例输入
8 3
8 1 2 3 9 4 7 10
10001010样例输出
-1
对于 30% 的评测用例,2 <= n <= 100,0 <= a[i] <= 100, 0 <= k <= 3。
对于所有评测用例,2 <= n <= 1000,0 <= a[i] <= 100000, 0 <= k <= 20。