目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
小华是个对数字很敏感的小朋友,他觉得数字的不同排列方式有特殊美感。某天,小华突发奇想,如果数字多行排列,第一行1个数,第二行2个,第三行3个,即第n行有n个数字,并且奇数行正序排列,偶数行逆序排列,数字依次累加。
这样排列的数字一定很有意思。聪明的你能编写代码帮助小华完成这个想法吗?规则总结如下:
a、每个数字占据4个位置,不足四位用“”补位,如1打印为1**
b、数字之间相邻4空格。
c、数字的打印顺序按照正序逆序交替打印,奇数行正序,偶数行逆序。
d、最后一行数字顶格,第n-1行相对第n行缩进四个空格
二、输入描述
第一行输入为N,表示打印多少行;1<=N<=30
例如:
输入:2
三、输出描述
XXXX1****
3XXXX2
四、解题思路
- 第一行输入为N;
- 每个数字占据4个位置,不足四位用“*”补位;
- 数字之间相邻4空格
- 奇数行正序排列;
- 偶数行逆序排列;
- 最后一行数字顶格,第n-1行相对第n行缩进四个空格。
五、Java算法源码
public static void main(String[] args) {// 处理输入Scanner sc = new Scanner(System.in);int n = sc.nextInt();int value = 1;for (int i = 0; i < n + 1; i++) {List<Integer> list = new ArrayList<>();for (int j = 0; j < i; j++) {list.add(value);value++;}StringBuilder builder = new StringBuilder();for (int j = 0; j < 4 * (n - i); j++) {builder.append(" ");}// 奇数行正序排列if (i % 2 == 1) {for (int j = 0; j < list.size(); j++) {StringBuilder sb = new StringBuilder(String.valueOf(list.get(j)));while (sb.length() < 4) {sb.append("*");}builder.append(sb);builder.append(" ");}// 偶数行逆序排列} else {for (int j = list.size() - 1; j >= 0; j--) {StringBuilder sb = new StringBuilder(String.valueOf(list.get(j)));while (sb.length() < 4) {sb.append("*");}builder.append(sb);builder.append(" ");}}System.out.println(builder.toString());}
}
六、效果展示
1、输入
5
2、输出
1*** 3*** 2*** 4*** 5*** 6***
10** 9*** 8*** 7***
11** 12** 13** 14** 15**
3、说明
🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。