• 某个Java面试题


    n=2

    1*2*5*6

    --3*4

    n=3

    1*2*3*10*11*12

    --4*5*8*9

    ----6*7

    如何实现如上结构的数据

    以下是我的想法:

    import java.util.Scanner;
    public class Case02 {
        private static Scanner sc = new Scanner(System.in);
        public static void main(String[] args) {
            System.out.println("n=2 1*2*5*6 --3*4 n=3 1*2*3*10*11*12 --4*5*8*9 ----6*7 ");
            System.out.println("想查看其他数字如上的结构吗?请输入一个数字n:");
            int n = sc.nextInt();
            int a[] =new int[n*2];
            int[] c = null;
            for (int i = 1; i < n; i++) {
                int x = 0;
                //只走一次的for循环
                if( i == 1 ){
                    for (int j = 1; j <=  n*(n+1) && i == 1; j++) {
                        if( j == n*(n+1) ){
                            System.out.print( j );
                            a[x] = j;
                            x++;
                        }else if( j <= n || j > n*n ){
                            System.out.print( j + "*");
                            a[x] = j;
                            x++;
                        }
                    }
                    System.out.println();
                    System.out.print("--");
                    //第一次进入方法是使用的是a数组
                    c = getNextArray(a, i ,n );
                }else{//其他都是c数组
                    c = getNextArray(c, i ,n );
                    //用来填充的横岗"--"
                    String nvl = "";
                    for (int j = 0; j < i; j++) {
                        nvl += "--";
                    }
                    System.out.print( nvl );
                }
                //输出
                for (int j = 0; j < c.length; j++) {
                    if( j == c.length-1 ){//排除最后一个*
                        System.out.print(c[j]);
                    }else{
                        System.out.print(c[j]+"*");
                    }
                }
                System.out.println();
            }
        }
        
        /**
         * 根据当前行数据来获取下一行数据的值
         * @param a    上一个数组
         * @param count 第几行
         * @param n 用户输入的数字
         * @return
         */
        private static int[] getNextArray( int[] a ,int count , int n){
            int[] b = new int[(a.length/2-1)*2];
            int x = 0;
            for (int i = 0; i < a.length; i++) {
                if( b.length != x ){
                    //把正中间的两个数删除
                    if( i < a.length/2-1 ){
                        b[x] = a[i]+(n-count+1);
                        x++;
                    }else if(i > a.length/2){
                        b[x] = a[i]-(n-count+1);
                        x++;
                    }
                }
            }
            return b;
        }
    }

    结果是对的,但是我是根据自己的想法一步一步写下了的。并没有什么技巧,就像我从小就喜欢数学,但是我只喜欢做难题一样,只做自己喜欢的事情。

    以下是参考答案:

    import java.util.Scanner;
    public class Case {
        @SuppressWarnings("resource")
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个数字:");
            int n = sc.nextInt();
            int c = 0;
            int max = n*(n+1);
            int r = 0;
            for (int i = n; i >= 1; i--) {
                for (int j = 0; j < n-i; j++) {
                    System.out.print("--");
                }
                for (int k = 0; k < i; k++) {
                    c++;
                    System.out.print(c+"*");
                }
                max = max - i;
                r = max;
                for (int k = 0; k < i; k++) {
                    r++;
                    if(k!=0){
                        System.out.print("*");
                    }
                    System.out.print(r);
                }
                System.out.println();
            }
        }
    }

      世界上聪明的人很多,老实的人很多,努力的人很多。也许你现在这些都做到了,但坚持下来的很少。

    所以,不该骄傲,不该浮躁。不该在看到别人不学习时就放弃了自己。

  • 相关阅读:
    AtCoder Grand Contest 019
    upd 2020.10.31
    ubuntu 自动配置脚本
    linux下gcc、g++不同版本的安装和切换
    fixes for 100% disk usage on Windows 10
    简单聊聊VisualStudio的断点调试
    运算符重载
    设计模式之桥接模式
    使用C#进行数据库增删改查ADO.NET(三)
    使用C#进行数据库增删改查ADO.NET(二)
  • 原文地址:https://www.cnblogs.com/liping0720/p/5682245.html
Copyright © 2020-2023  润新知