黑马程序员技术交流社区

标题: 看到个难题,进来说说你的想法 [打印本页]

作者: 小牛想成为大牛    时间: 2016-11-7 00:44
标题: 看到个难题,进来说说你的想法


作者: 小牛想成为大牛    时间: 2016-11-7 00:46
谈谈你的想法
作者: 若白衣卿相    时间: 2016-11-7 01:49
最外层四条边,每条边平均3个元素,光这就两层循环了。还要进入内层,这就是要三层了吧。我是这个思路,做了半天没做好,明天再试一下

作者: 默默默默    时间: 2016-11-7 07:21
不连续,简单两层for循环不行吧,里面得嵌套判断

作者: IceLoveInFire丶    时间: 2016-11-7 13:24
我能说没明白啥意思么是按这个格式打印吗

作者: poi1234bnm    时间: 2016-11-7 14:01
这不是入学笔试的时候要交十道题里面的一道么。。
作者: 小牛想成为大牛    时间: 2016-11-7 18:46
poi1234bnm 发表于 2016-11-7 14:01
这不是入学笔试的时候要交十道题里面的一道么。。

不知道呀
作者: 小牛想成为大牛    时间: 2016-11-7 18:51
若白衣卿相 发表于 2016-11-7 01:49
最外层四条边,每条边平均3个元素,光这就两层循环了。还要进入内层,这就是要三层了吧。我是这个思路,做 ...

你单针对这个可以想,但是如何输入指定层数打定指定图形了呢。。。
作者: 小牛想成为大牛    时间: 2016-11-7 19:01
默默默默 发表于 2016-11-7 07:21
不连续,简单两层for循环不行吧,里面得嵌套判断

你试出来了没。。。
作者: 小牛想成为大牛    时间: 2016-11-7 19:03
IceLoveInFire丶 发表于 2016-11-7 13:24
我能说没明白啥意思么是按这个格式打印吗

是的啊~~~~~~~~~~
作者: javatype    时间: 2016-11-7 19:06
这题好难啊,什么鬼,用循环?
作者: L10052108    时间: 2016-11-8 21:15
首先说说这道题吧,是我做过一道面试题。不是很难,关键是有点儿绕,说说我的解题步骤:
[AppleScript] 纯文本查看 复制代码
package com.itheima;

import java.util.Scanner;

/**
* 目的:写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列
*
* @version V1.0
* @author liuwei
*
*/
/*
* 分析:创建一个二维数组arr[x][y] 先分析最外圈的数据组成特点,分成四个过程 :1,x 不变 y 增加 2,y值不变 x 增加 3,x值不变
* y值减少 4,y值不变 x值减小 结束条件是,赋值的数字增加了 n * n 的时候
*/
public class Test7 {
        public static void main(String[] args) {
                System.out.println("请输入方阵的大小:");

                Scanner sc = new Scanner(System.in);

                int n = sc.nextInt();

                // 创建一个二维数组
                int arr[][] = new int[n][n];

                // 表示while 循环次数
                int count = 0;

                // 表示需要赋值的大小
                int num = 1;

                // 给二维数组赋值
                while (num <= n * n) {
                        int i;
                        // x 不变 y 增加
                        for (i = count; i <= (n - count - 1); i++) {
                                arr[count] = num++;
                        }

                        // y值不变 x 增加
                        for (i = (count + 1); i <= (n - count - 1); i++) {
                                arr[n - count - 1] = num++;
                        }

                        // x 不变 y 减少
                        for (i = (n - count - 1 - 1); i >= count; i--) {
                                arr[(n - count - 1)] = num++;
                        }

                        // y值不变 x值减小
                        for (i = (n - count - 1 - 1); i >= (count + 1); i--) {
                                arr[count] = num++;
                        }

                        // 四次赋值结束后,进行自增
                        count++;
                }

                // 控制台输出二维数组
                for (int x = 0; x < n; x++) {
                        for (int y = 0; y < n; y++) {
                                System.out.print(arr[x][y] + "\t");
                        }
                        // 每一次输出一行进行一 换行
                        System.out.println();
                }

        }
}

使用步骤:键盘录入一个数字,可以生成任意一个,这种数字图。

作者: hxs    时间: 2016-11-8 22:11
楼主做出来了吗?
作者: 小牛想成为大牛    时间: 2016-11-8 23:20
没有,不过你可以网上搜搜打印螺旋矩阵
作者: 小牛想成为大牛    时间: 2016-11-9 23:34
L10052108 发表于 2016-11-8 21:15
首先说说这道题吧,是我做过一道面试题。不是很难,关键是有点儿绕,说说我的解题步骤:
[mw_shl_code=appl ...

你这个没问题,我照着你的思想做了一下但是我的有BUG,有的打印可以有的不可以、、、
import java.util.Scanner;

class Test {
                public static void main(String[] args) {
                        Scanner sc=new Scanner(System.in);
                        int n =sc.nextInt();
                        int[][] arr=new int[n][n];
                        int circle=0;
                        int num=1;//要输入的额数
                        while(num<=n*n){
                                //X不变,Y增加
                                for(int i=0;i<n-circle*2-1;i++){
                                        arr[circle][i+circle] = num++; //num =6 ;
                                }
                               
                                //X增加,Y不变
                                for(int i=0;i< n - circle*2-1;i++){
                                        arr[i+circle][n-circle-1]=num++;    //num=9
                                }
                               
                                //X不变,Y减小
                                for(int i = n-circle-1;i>circle;i--){  //
                                        arr[n-circle-1] = num++;
                                }
                               
                                //X减小,Y不变
                                for(int i= n-circle-1;i>circle;i--){
                                        arr[circle] = num++;
                                }
                                System.out.println(num);
                                circle++;
                        }
                        for(int i=0;i<n;i++){
                                for(int j=0;j<n;j++){
                                        System.out.print(arr[j]+"\t");
                                }
                                System.out.println();
                        }
                }
        }


作者: L10052108    时间: 2016-11-10 09:53
小牛想成为大牛 发表于 2016-11-9 23:34
你这个没问题,我照着你的思想做了一下但是我的有BUG,有的打印可以有的不可以、、、
import java.util.S ...

我试过3,4,5甚至15没有问题,举个出现问题例子,我好调试

作者: 小牛想成为大牛    时间: 2016-11-11 00:07
L10052108 发表于 2016-11-10 09:53
我试过3,4,5甚至15没有问题,举个出现问题例子,我好调试

你试的是我的嘛?我不的很多不可以啊 3 ,5,7都不行
作者: L10052108    时间: 2016-11-11 00:18
本帖最后由 L10052108 于 2016-11-12 20:27 编辑

照着我的程序去写吧!
你在循环体内的语句和我的不一样。仔细找找看吧
[AppleScript] 纯文本查看 复制代码
//X不变,Y减小
                    for(int i = n-circle-1;i>circle;i--){  //
                            arr[n-circle-1] = num++;
                    }
                    
                    //X减小,Y不变
                    for(int i= n-circle-1;i>circle;i--){
                            arr[circle] = num++;
                    }

arr 是二维数组,而你却当成一维数组
arr[n-circle-1] = num++;
arr[circle] = num++;
编译都无法通过,不知道你是如何调试的

[AppleScript] 纯文本查看 复制代码
  for(int i=0;i<n-circle*2-1;i++){
                                        arr[circle][i+circle] = num++; //num =6 ;
                                }



circle*2-1;表示的是长度,而不是这行的最大的那个数值。(mspaint 画的草图)







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2