请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的 6 个二进制为全为 0 。请将这个数的十进制形式作为答案提交。
public static void main(String[] args) {
int flag=0;
for(int i=2023;;i++){
String str=Integer.toBinaryString(i); //转换为二进制
if(str.length()>=6) { //二进制长度大于6才继续
String substr = str.substring(str.length() - 6); //取出最后6 个二进制位
if(substr.equals("000000")) {
System.out.println(i);
break;
}
}
}
}
结果:
2048
计算1949年10月1日至2022年1月1日间隔的天数
直接用电脑自带计算器:
8518 是一个非常特殊的数,如果把这个数看成 16 进制数,它的值为 (8518)16=8161616+51616+116+8=34072,而 34072 正好是 8518 的整数倍。9558 也是这样一个数,当看成 16 进制时是 38232。其实长度为 1 的数 0 到 9 都满足看成 16 进制后是自己的整数倍(1倍)。请问,除开长度为 1 的数,最小的满足这样条件的数是多少?
public static void main(String[] args) {
for(int i=10;;i++){
int num=Integer.valueOf(Integer.toString(i),16);//将数值看作16进制数,将其转为10进制
if(num%i==0) {
System.out.println(i);
break;
}
}
}
结果:
1038
从矩阵第一行第一列出发,只能水平往右走或者竖直往下走,求所走折线的数字之和的最大值。
2022能拆分为多个质数之和,请问最多能拆分为多少个?
public class h5 {
// 判断数字是否为质数
public static boolean iszhishu(int n){
for(int i=2;i<n;i++){
if(n%i==0)
return false;
}
return true;
}
public static void main(String[] args) {
int sum=2; //记录质数之和
int count=1; //记录质数的个数
for(int i=3;i<2022;i++){
if(iszhishu(i)) {
sum += i;
count++;
}
if(sum>=2022) { //看>=2022最近的数是哪个
System.out.println("质数之和:"+sum);
System.out.println("当前数字:"+i);
System.out.println("质数个数:"+count);
break;
}
}
}
}
结果:
质数之和:2127
当前数字:139
质数个数:34
和为2127时质数个数为34,所以仅需剔除5这个质数,就可以得到2022,因此答案为34-1=33个。
小蓝正在拷贝一份文件,他现在已经拷贝了 t 秒时间,已经拷贝了 c 字节,文件总共有 s 字节, 如果拷贝是匀速进行的,请问小蓝大概还需要拷贝多少秒?
3 10 20
3
30 14 21
15
public class h6 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt(); //已经拷贝了 t 秒时间
int c=sc.nextInt(); //已经拷贝了 c 字节
int s=sc.nextInt(); //文件总共有 s 字节
double speed=c/(double)t; //计算拷贝速度,记得转换为double
int ans=(int)Math.round((s-c)/speed); //结果四舍五入
System.out.println(ans);
}
}
结果:
3 10 20
3
30 14 21
15
30 14 22
17
小蓝有 n 个单词,但是单词中有一些是重复的,请帮小蓝去除重复的单词。
5
lanqiao
hi
hello
hello
lanqiao
lanqiao
hi
hello
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Scanner;
public class h7 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String[] s=new String[n];
for(int i=0;i<n;i++)
s[i]=sc.next();
ArrayList<String> list1=new ArrayList<>(Arrays.asList(s));
LinkedHashSet<String> hashSet=new LinkedHashSet<>(list1); //集合自动去重
ArrayList<String> list2=new ArrayList<>(hashSet);
for(String str:list2)
System.out.println(str);
}
}
结果:
8
lanqiao
lanqiao
hi
lanqiao
hello
hello
hello
hi
lanqiao
hi
hello
一个字符串如果从左向右读和从右向左读相同,则称为一个回文串,例如 lanqiaoaiqnal 是一个回文串。小蓝有一个字符串,请将这个字符串右边加上一些字符,使其成为一个回文串。如果有多种方案,请输出最短的回文串。
lanqiao`
lanqiaoaiqnal`
banana`
bananab
noon
noon
public class h8 {
//判断是否是回文串
public static boolean ishuiwen(String s){
int n=s.length();
int l=0,r=n-1;
while(l<r){
if(s.charAt(l)==s.charAt(r)){
l++;
r--;
}
else
return false;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
StringBuilder sb = new StringBuilder(s);
if (ishuiwen(s))
System.out.println(s);
else {
int l = 0, r = s.length() - 1; //左右双指针
while (l < r) {
if (sb.charAt(l) != sb.charAt(r)) {
sb.insert(r + 1, sb.charAt(l)); //左右指针字符不对应,就插入
} else
r--;
l++;
}
System.out.println(sb.toString());
}
}
}
结果
banana
bananab
lanqiao
lanqiaoaiqnal
noon
noon
给定一个字母矩阵。一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成,四条线段的长度相同,而且四条线段上的字母和中心点的字母相同。一个 X图形可以使用三个整数 r, c, L 来描述,其中 r, c 表示中心点位于第 r 行第 c 列,正整数 L 表示引出的直线段的长度。 对于 1 到 L 之间的每个整数 i,X图形满足:第 r-i 行第 c-i 列与第 r 行第 c 列相同,第 r-i 行第 c+i 列与第 r 行第 c 列相同,第 r+i 行第 c-i 列与第 r 行第 c 列相同,第 r+i 行第 c+i 列与第 r 行第 c 列相同。例如,对于下面的字母矩阵中,所有的字母 L 组成一个 X图形,其中中间的 5 个 L 也组成一个 X图形。所有字母 Q 组成了一个 X图形。
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
给定一个字母矩阵,请求其中有多少个 X图形。
5 6
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
3
public class h9 {
//public static void show(char[][] a){
// int n=a.length;
// for(int i=0;i
// for(int j=0;j
// System.out.print(a[i][j]+" ");
// System.out.println();
// }
//}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
String[] s=new String[n];
char[][] ch=new char[n][m];
for(int i=0;i<n;i++)
s[i]=sc.next();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
ch[i][j]=s[i].charAt(j);
}
//show(ch);
int count=0; //记录所有X图形个数
for(int i=1;i<n-1;i++){
for(int j=1;j<m-1;j++){
int zs=0,zx=0,ys=0,yx=0; //记录每个字母左上左下右上右下分别有多少个和中心字母相同
// 左上角
for(int k=1;k<=Math.min(i,j);k++) {
if (ch[i][j] != ch[i - k][j - k])
break;
zs++;
}
// 左下角
for(int k=1;k<=Math.min(n-i-1,j);k++) {
if (ch[i][j] != ch[i+k][j-k])
break;
zx++;
}
// 右上角
for(int k=1;k<=Math.min(i,m-j-1);k++) {
if (ch[i][j] != ch[i-k][j+k])
break ;
ys++;
}
// 右下角
for(int k=1;k<=Math.min(n-i-1,m-j-1);k++) {
if (ch[i][j] != ch[i+k][j+k])
break;
yx++;
}
int min=(min=(min=(zs<zx)?zs:zx)<ys?min:ys)<yx?min:yx; //求出四个中的最小值,即该字母可以构成多少个X图形
count+=min; //累计所有X图形个数
}
}
System.out.println(count);
}
}
5 6
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
3
5 11
AAAAALQAALQ
AAAAAALQLQA
AAAAAAALQAA
AAAAAALQLQA
AAAAALQAALQ
15
自己做的,菜鸟一枚,可能有不少错漏之处,请大家指正。