目录
1、 二进制位数
问题描述
十进制整数 2 在十进制中是 1 位数,在二进制中对应 10 ,是 2 位数。
十进制整数 22 在十进制中是 2 位数,在二进制中对应 10110 ,是 5 位数。
请问十进制整数 2022 在二进制中是几位数?
1.1代码实现
public static void main(String args[]){
int Result=2022;
int count=0;
while (true)
{
Result/=2;
count++;
if(Result==0)
break;
}
System.out.println(count);
}
2、跑断腿的小蓝
问题描述
小蓝每周六、周日都晨跑,每月的 1、11、21、31日也晨跑。其它时间不晨跑。
已知 2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?
2.1代码实现
public static void main(String args[]){
int Months[]={31,28,31,30,31,30,31,31,30,31,30,31};
int week=6;//1月一号为周六
int RunDays=0;
for(int m=0;m<12;m++)
for (int days=1;days<=Months[m];days++){
if(days==1||days==11||days==21||days==31||week==6||week==0){
RunDays++;
}
week++;
week=week%7;//求余来设定周几
}
System.out.println(RunDays);
}
3、调和级数
问题描述
小蓝特别喜欢调和级数 S(n)=1/1+1/2+1/3+1/4+…+1/n 。
请问,n 至少为多大时,S(n)>12 ?
3.1代码实现
public static void main(String args[]){
double Sum=0;
int Num=0;
while (Sum<=12){
Sum+=1.0/(Num+1);
Num++;
}
System.out.println(Num);
}
4、山谷
问题描述
给定一个字母矩阵,如果矩阵中的某个位置不在四条边上,而且该位置上的字母小于其上下左右四个位置的字母,则称为一个山谷。
例如,对于如下矩阵
共有两个山谷,位于第二行第二列和第四列。请注意第二行第三列和第三行第五列都不是山谷。
对于如下30行60列的字母矩阵(请用等宽字体查看),请问有多少个山谷?
4.1代码实现
public static void main(String agrs[]){
Scanner scanner=new Scanner(System.in);
String []Array=new String[30];
for(int i=0;i<30;i++){
Array[i]=scanner.next();
}
//System.out.println("Over!");
int count=0;
for(int l=1;l<29;l++)
for (int c=1;c<59;c++){
if(Array[l].charAt(c)<Array[l-1].charAt(c)&&Array[l].charAt(c)<Array[l+1].charAt(c)&&Array[l].charAt(c)<Array[l].charAt(c-1)&&Array[l].charAt(c)<Array[l].charAt(c+1))
count++;
}
System.out.print(count);
}
5、最小矩阵
问题描述
小蓝有一个 100 行 100 列的矩阵,矩阵的左上角为 1。其它每个位置正好比其左边的数大 2,比其上边的数大 1 。
例如,第 1 行第 2 列为 3,第 2 行第 2 列 为 4,第 10 行第 20 列为 48。
小蓝想在矩阵中找到一个由连续的若干行、连续的若干列组成的子矩阵,使得其和为 2022,请问这个子矩阵中至少包含多少个元素(即子矩阵的行数和列数的乘积)
5.1代码实现
public static void main(String agrs[]) {
int Sum=0;
int Result=0;
int Array[][] = new int[100][100];
for (int L = 0; L <99; L++) {
for (int C = 0; C <99; C++) {
if (L == 0 && C == 0)
Array[L][C] = 1;
if (C == 0 && L != 0)
Array[L][C] = Array[L - 1][C] + 1;
Array[L][C + 1] = Array[L][C] + 2;
}
}
for (int x = 0; x <100; x++) {
for (int y = 0; y <100; y++) {
for(int n=1;n<100-x;n++){
for (int k=1;k<100-y;k++){
Sum=FindSum(Array,x,y,n,k);
if(Sum==2022) {
Result=n*k;
//System.out.println(n*k);
break;
}
else if(Sum>2022)
break;
}
}
}
}
System.out.println(Result);
}
public static int FindSum(int Num[][],int x,int y,int x1,int y2){
int Sum=0;
for(int L=x;L<x+x1;L++) {
for (int C=y; C< y + y2; C++)
Sum += Num[L][C];
}
return Sum;
}
文章部分参考来源:
————————————————
6、总结
总的来说,题目有难有简单,但是都值得我们去细细思索,去钻研,本期题解就到这里了,欢迎下期再见(五道编程大题)。欢迎关注!!