问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
这天小明正在学数数。
他突然发现有些止整数的形状像一挫 “山”, 比㓚 123565321、145541, 它 们左右对称 (回文) 且数位上的数字先单调不减, 后单调不增。
小朋数了衣久也没有数完, 他想让你告诉他在区间 [2022,2022222022] 中有 多少个数的形状像一座 “山”。
运行限制
最大运行时间:1s
最大运行内存: 512M
源码:
public class 山 {
public static void main(String[] args) {
int n=0;
for (int i = 2022; i <= 2022222022; i++) {
if (huiwen(i) && dandiao(i)) {
n++;
System.out.println(i);
}
}
System.out.println(n);
}
private static boolean dandiao(int n) {
int a[] = new int[10];
int i = 0;
while(n > 0) {
a[i++] = n % 10;
n = n / 10;
}
int l,r;
//数字位数奇偶性的判断
if(i % 2 == 0) {
l = i / 2 - 1;
r = i / 2;
}else {
l = i / 2;
r = i / 2;
}
//注意读题,单调递增,单调不增,则a[j] < a[j-1],而不是a[j] <= a[j-1]
for (int j = 1; j <= l; j++) {
if(a[j] < a[j-1]) {
return false;
}
}
//从后向前遍历,判断单调不减
for (int j = i-2; j >= r; j--) {
if(a[j] < a[j+1]) {
return false;
}
}
return true;
}
private static boolean huiwen(int n) {
int[] arr = new int[10];
int i=0;
while(n > 0) {
arr[i++] = n % 10;
n = n / 10;
}
int l=0,r=i-1;
while(l<r) {
if (arr[l]!=arr[r]) {
return false;
}
l++;
r--;
}
return true;
}
}