赞
踩
第一题:
停车场有一横排车位,0代表没有停车,1代表有车,至少停了一辆车在车位上,也至少有一个空位没有停车。
为了放剐蹭,需为停车人找到一个车位,使得距停车人的车最近的车辆的距离是最大的,返回此时的最大距离。
输入描述:一个字符串,半角逗号隔开
输出描述:输出一个整数记录最大距离
思路:
遍历数组,对于是0的位置,代表可以停车,从这个位置往左右两边找到的第一个是1的位置,取两边的最小值,特殊处理一下第一个位置和最后一个位置是0的情况就行。
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); // 将输入的字符串拆分、转换放入整数数组中 int[] g = Arrays.stream(cin.nextLine().split(",")).mapToInt(Integer::parseInt).toArray(); int n = g.length; // 数组长度 int res = -1; //返回结果,默认-1 // 遍历数组 for (int i = 0; i < n; ++i) { if (g[i] == 1) { // 当前位置为1,进入下一次循环 continue; } else { // 否则,找到数字为0的最长连续区间,以i为中心向左右扩展 int l = i, r = i; while (l >= 0 && g[l] != 1) { l--; // 向左扩展 } while (r < n && g[r] != 1) { r++; // 向右扩展 } int left = i - l; // 左边长度 int right = r - i; // 右边长度 if (l==-1 && i==0){ // 如果左边没有1,只需要更新右边0区间长度 res = Math.max(res, right); }else if (r==n&&i==n-1){ // 如果右边没有1,只需要更新左边0区间长度 res = Math.max(res, left); }else { // 否则,更新左右两边的最小区间长度 res = Math.max(res, Math.min(left, right)); } } } System.out.println(res); } } /* 1. 从输入中读取一行字符串,并使用空格分隔,将每个字符转换为整数,存储在数组`g`中。 2. 定义整数`n`,表示数组`g`的长度。 3. 定义整数`res`,用于记录最终结果,默认为-1。 4. 使用循环遍历数组`g`,对每个元素进行判断。 5. 如果当前元素为1,则跳过继续下一次循环,因为要找的是连续0区间。 6. 否则,以当前位置`i`为中心,向左右两边扩展,找到最长的连续0区间。 7. 分别计算左边和右边的连续0区间长度,分别为`left`和`right`。 8. 根据情况更新最长连续0区间的长度`res`。如果左边没有1,则只更新右边的0区间长度;如果右边没有1,则只更新左边的0区间长度;否则,更新左右两边的最小0区间长度。 9. 最后输出最长连续0区间的长度`res`。 * */
第二题
小华是一个很有数字很敏感的小朋友,他觉得数字的不同排列方式有特别美感。某天,小华突发奇想,如果数字多行排列,第一行1个数,第二行2个,第三行3个,即第n行有n个数字,并且奇数行正序排列,偶数行逆序排序,数字依次累加,这样排列的数字一定很有意思,聪明的你能编写代码帮助小华完成这个想法吗?
a,每个数字占据4个位置,不足四位用补位,如1打印为1 * ***
b,数字之间相邻4空格
c,数字打印顺序正反交替,奇数行正序,偶数行逆序
d,最后一行数字定格,第n-1行相对第n行缩进四个空格
输入:2
输出:
XXXX1****
3****XXXX2****
思路:
每行按照奇偶来确定排列顺序,然后让一个变量一直递增,第i行就是有i个数字,每个数字补齐到长度为4,然后对于每行,前面要加 n-i 个四个空格
import java.util.Scanner; import java.util.StringJoiner; public class Main2 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); // 记录输出的行数 int cnt = 1; // 计数器,用于填充数组元素 // 外层循环,控制输出的行数 for (int i = 1; i <= n; i++) { int[] list = new int[i]; // 长度为i的数组 // 内层循环,填充数组元素 for<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。