1.世纪末的星期–日期问题
java日期时间
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Calendar ca=Calendar.getInstance();
for(int i=1999;i<100000;i+=100) {
ca.set(i, 11, 31);
if(ca.get(Calendar.DAY_OF_WEEK)==1){
System.out.println(i);
break;
}
}
}
}
2.马虎的算式
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a,b,c,d,e;
int ret=0;
for(a=1;a<=9;a++) {
for(b=1;b<=9;b++) {
for(c=1;c<=9;c++) {
for(d=1;d<=9;d++) {
for(e=1;e<=9;e++) {
if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e) {
if(((a*10+b)*(c*100+d*10+e))==((a*100+d*10+b)*(c*10+e))){
ret++;
}
}
}
}
}
}
}
System.out.println(ret);
}
}
3.振兴中华
import java.util.Calendar;
import java.util.Scanner;
public class Main {
static int lujing(int x,int y) {
if(x==3||y==4) {
return 1;
}
return lujing(x+1,y)+lujing(x,y+1);
}
public static void main(String[] args) {
int res=lujing(0,0);
System.out.println(res);
}
}
4.上台阶
import java.util.Calendar;
import java.util.Scanner;
public class Main {
static int a[]= {0,1,2,1,1,1,1,5,5,4,-1,-1,-2,-3,-1,-9};
static int mm=0x3f3f3f3f;
static int dfs(int idx,int k) {
if(idx==15) {
return -9;
}
if(k==6) {
return -mm;
}
int res=-mm;
for(int i=1;i<=4&&idx+i<=15;i++) {
res=Math.max(res, dfs(idx+i,k+1));
}
return res+a[idx];
}
public static void main(String[] args) {
System.out.println(dfs(0,0));
}
}
5.递增三元组
import java.util.Calendar;
import java.util.Scanner;
public class Main {
static int a[]= {2,9,17,4,14,10,25,26,11,14,16,17,14,21,16,27,32,20,26,36};
public static void main(String[] args) {
int res=0;
int n=a.length;
for(int i=0;i<n-2;i++) {
for(int j=i+1;j<n-1;j++) {
for(int k=j+1;k<n;k++) {
if(a[i]<a[j]&&a[j]<a[k]) {
res++;
}
}
}
}
System.out.println(res);
}
}
十三期-模拟题
题1
小蓝的IP地址为 192.168.*.21,其中 * 是一个数字,请问这个数字最大可能是多少 ? 答案:255
题2
如果一个整数 g 能同时整除整数 A 和 B,则称 g 是 A 和 B 的公约数。例如:43 是 86 和 2021 的公约数。 请问在 1(含) 到 2021(含) 中,有多少个数与 2021 存在大于 1 的公约数。请注意 2021 和 2021 有大于 1 的公约数,因此在计算的时候要算一个。 答案:89
import java.util.Scanner;
public class Main {
static int gcd(int a,int b) {
return b>0?gcd(b,a%b):a;
}
public static void main(String[] args) {
int res=0;
for(int i=1;i<=2021;i++) {
if(gcd(i,2021)>1) {
res++;
}
}
System.out.println(res);
}
}
题3
如果一个整数 M 同时是整数 A 和 B 的倍数,则称 M 是 A 和 B 的公倍数,公倍数中最小的一个正整数称为最小公倍数。 例如:2021 和 86 的最小公倍数是 4042. 请问在 1(含) 到 2021(含) 中,有多少个数与 2021 的最小公倍数是 4042。 答案:3
import java.util.Scanner;
public class Main {
static int gcd(int a,int b) {
return b>0?gcd(b,a%b):a;
}
public static void main(String[] args) {
int res=0;
for(int i=1;i<=2021;i++) {
if(i*2021/gcd(i,2021)==4042) {
res++;
}
}
System.out.println(res);
}
}
题4
10 是一个非常特殊的数,它可以表示成两个非负整数的平方和,10 = 3 * 3 + 1 * 1。 9 也是同样特殊的数,它可以表示成 9 = 3 * 3 + 0 * 0。 请问,在 1 到 2021 中有多少个这样的数? 请注意,有的数有多种表示方法,例如 25 = 5 * 5 + 0 * 0 = 3 * 3 + 4 * 4,在算答案时只算一次。 答案 :1632
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int res=0;
for(int i=0;i<=2021;i++) {
for(int j=0;j<=2021;j++) {
for(int k=0;k<=2021;k++) {
if(i*i+j*j==k)res++;
}
}
}
System.out.println(res);
}
}
题5
下面是一个2020的矩阵,矩阵中的每个数字是一个1到9之间的数字,请注意显示时去除了分隔符号。 69859241839387868941 17615876963131759284 37347348326627483485 53671256556167864743 16121686927432329479 13547413349962773447 27979945929848824687 53776983346838791379 56493421365365717745 21924379293872611382 93919353216243561277 54296144763969257788 96233972513794732933 81443494533129939975 61171882988877593499 61216868895721348522 55485345959294726896 32124963318242554922 13593647191934272696 56436895944919899246 矩阵中一个子矩阵的值是指子矩阵中所有数值的和。 请问,矩阵中值最大的一个55的子矩阵的值是多少? 答案: 154
import java.util.Scanner;
public class Main {
static int n=20;
static int s[][]=new int [n+1][n+1];
static int res=0;
static int sum(int i,int j) {
return s[i][j]-s[i-5][j]-s[i][j-5]+s[i-5][j-5];
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
for(int i=1;i<n;i++) {
String ss =sc.next();
for(int j=1;j<n;j++) {
s[i][j]=ss.charAt(j)-'0';
s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
}
}
for(int i=5;i<n;i++) {
for(int j=5;j<=n;j++) {
res=Math.max(sum(i, j),res);
}
}
System.out.println(res);
}
}
题6
? 小蓝要写一个网页显示一些商品。
? 商品总共有 t 个,按顺序由 1 到 t 编号,每页显示 a 个,请问第 p 页显示的最小和最大编号是多少? 【输入格式】 ? 输入一行包含三个整数 t、a、p,相邻整数之间用一个空格分隔。 【输出格式】 ? 输出一行包含两个整数,分别表示最小和最大编号。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
int a=sc.nextInt();
int p=sc.nextInt();
int res=(p-1)*a+1;
System.out.println(res+" "+Math.max(t, a*p));
}
}
题7
哈弗曼树求编码长度 https://blog.csdn.net/qq_44867340/article/details/119455799
?题8
给定一个正整数 n,请判断 n 的所有数位上的值是否从左到右是严格递增的。 ? 例如:1589 是严格递增的 。 ? 再如:1336 不是严格递增的,中间有相同的 3。 ? 再如:1598 不是严格递增的。 【输入格式】 ? 输入一行包含一个正整数 n。 【输出格式】 ? 如果是严格递增的,输出“YES”(全大写),否则输出“NO”(全大写)。 【样例输入】 1589 【样例输出】 YES 【样例输入】 1336 【样例输出】 NO 【评测用例规模与约定】 ? 对于所有评测用例,1 <= n <= 1000000000。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next();
int cnt=0;
for(int i=0;i+1<s.length();i++) {
if((s.charAt(i)-'0')<(s.charAt(i+1)-'0')) {
cnt++;
}
}
if(cnt==s.length()-1) {
System.out.println("YES");
}else {
System.out.println("NO");
}
}
}
题9
有 n 个人要排列成一个 k 行 k 列的方阵,请问 k 最大是多少? 输入格式 输入一行包含一个整数 n。 输出格式 输出一行包含一个整数,表示答案。 样例输入 15 样例输出 3 样例输入 81 样例输出 9 评测用例规模与约定 对于 50% 的评测用例,2 <= n <= 1000。 对于所有评测用例,2 <= n <= 100000000。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println((int)Math.sqrt(n));
}
}
題10
问题描述 一个 1 到 n 的排列被称为半递增序列,是指排列中的奇数位置上的值单调递增,偶数位置上的值也单调递增。 例如:(1, 2, 4, 3, 5, 7, 6, 8, 9) 是一个半递增序列,因为它的奇数位置上的值是 1, 4, 5, 6, 9,单调递增,偶数位置上的值是 2, 3, 7, 8,也是单调递增。 请问,1 到 n 的排列中有多少个半递增序列? 输入格式 输入一行包含一个正整数 n。 输出格式 输出一行包含一个整数,表示答案,答案可能很大,请输出答案除以 1000000007 的余数。 样例输入 5 样例输出 10 样例说明 有以下半递增序列: (1, 2, 3, 4, 5) (1, 2, 3, 5, 4) (1, 2, 4, 3, 5) (1, 3, 2, 4, 5) (1, 3, 2, 5, 4) (1, 4, 2, 5, 3) (2, 1, 3, 4, 5) (2, 1, 3, 5, 4) (2, 1, 4, 3, 5) (3, 1, 4, 2, 5) 评测用例规模与约定 对于 50% 的评测用例,2 <= n <= 20。 对于所有评测用例,2 <= n <= 1000。
题解:排列组合问题,假设100个数,奇数50个递增,其余50个偶数必定递增且唯一,因为只剩50个数且需要满足递增,齐数与偶数分别传入不同的参数,进行取余计算
import java.util.Scanner;
public class Main {
static int N = (int) 1e9 + 7;
static long c(long a, long b) {
long cnt = 1;
for (long i = 1, j = a; i <= b; i++, j--) {
cnt = cnt * (j / i) % N;
}
return cnt;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
if (n % 2 == 0) {
System.out.println(c(n, n / 2));
} else {
System.out.println(c(n, (n + 1) / 2));
}
}
}
1 秒=1000 毫秒
题11停车时间
【问题描述】 ? 小蓝将自己的车停在路边,在同一天将车开走。给定停车时间和开走时间,请问小蓝停了多长时间? 【输入格式】 ? 输入两行,第一行包含停车时间,第二行包含开走时间。 ? 每个时间的格式为 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.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader brBufferedReader=new BufferedReader(new InputStreamReader(System.in));
String string[]= brBufferedReader.readLine().split(":");
String string2[]=brBufferedReader.readLine().split(":");
int h1=Integer.parseInt(string[0]);
int m1=Integer.parseInt(string[1]);
int s1=Integer.parseInt(string[2]);
int h2=Integer.parseInt(string2[0]);
int m2=Integer.parseInt(string2[1]);
int s2=Integer.parseInt(string2[2]);
int time=(h2*3600+m2*60+s2)-(h1*3600+m1*60+s1);
System.out.printf("%02d:%02d:%02d\n",time/3600,time%3600/60,time%60);
}
}
文件大小
|