一道简单的for循环面试题(数字龙形排序)
本道题是我从网上见到的,因为是一道很久没做的循环题,自己的思路也是陷入了一些思维陷阱中,后来经过把大脑放空,重新看这道题后,思路立马就出来了。
题目就是完成如下图所示的效果:
我一开始是想着将它按照奇偶行来区分每一行都是一个数组,来将这些数组进行输出,后来发现总是无法跳出循环,就改用了第二种思路:将(行列)个数放入一个数组中,当奇数行时采用正序排列,偶数行采用倒序排列就ok啦。*
有了整体的思路后就需要考虑倒序排列的问题了,其实就是将数组的位置能用行和列表示出来。
for (int i = 0; i < hang; ++i) {
if (i % 2 != 0) {
for (int j = 0; j < lie; j++) {
// 赋值
arr[i * lie + lie - j - 1] = start;
start++;
}
} else {
for (int j = 0; j < lie; j++) {
arr[i * lie + j] = start;
start++;
}
}
}
接下来就可以完善全部代码了,全部代码如下,有需要的可以自行研究
// 利用数组打印出蛇形结构
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入开始数据:");
int start = sc.nextInt();
System.out.print("请输入行数:");
int hang = sc.nextInt();
System.out.print("请输入列数:");
int lie = sc.nextInt();
// 可以知道总的数数量是 hang*lie,所以可以从start开始 一个一个的添加进数组里
int[] arr = new int[hang * lie];
int count = 0;
for (int i = 0; i < hang; ++i) {
if (i % 2 != 0) {
for (int j = 0; j < lie; j++) {
// 赋值
arr[i * lie + lie - j - 1] = start;
start++;
}
} else {
for (int j = 0; j < lie; j++) {
arr[i * lie + j] = start;
start++;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
count++;
if (count % lie == 0) {
System.out.println();
}
}
}
我是一个正在偷偷努力学习java的大胖子,有任何问题大家都可以发在我的个人公众号上边,我也会尽量帮大家解决,当然,我也只是一个正在学习java的人,并不能保证“每个(其实是大部分问题都不能)”问题都能回答上来。
还有我的个人公众号会不定时更新我的java学习之路,大家如果也在学习java可以在公众号上边与我交流哦。