zoukankan      html  css  js  c++  java
  • 猿辅导2019校招技术类笔试题 [编程题]拍照队形

    问题描述

    猿辅导公司的 N位(N>=4)研发同学组织了一次秋游活动,某同学带了个无人机在高空拍照,活动结束时,先拍了一张所有同学排成公司猴头Logo的照片, 接着有人提议再排成“猿”的首字母Y字形来拍一张合照。

    用字符串中的每一个字符(不是换行符或结束符'')代表一位老师,输出排好后的队形。要求 Y字除去中心点外,上下半部分等高,按照从左到右,从上到下进行排序。队形中没人的部分用空格占位。
    输入数据保证可以排出一个完整的Y字,即长度为 3k+1 (k>=1)

    例如: 7个 x ,排成队形为(为了方便说明,这里用‘-’代替空格):
    x---x
    -x-x
    --x
    --x
    --x

    输入描述

    输入数据有两行,第一行输入N(N<=1000),表示字符串长度。
    第二行输入字符串。

    输出描述

    用字符串表示的排好的队形,没人处用空格(' ')占位,行尾不能有多余字符,即每行最后一个字符(除了换行符以外),为字符串中代表该老师的字符。

    输入例子1

    4
    a3f/

    输出例子1

    a 3
     f
     /

    输入例子2

    7
    abcdefg

    输出例子2

    a   b
     c d
      e
      f
      g

    输入例子3

    10
    iiiiiiiiii

    输出例子3

    i     i
     i   i
      i i
       i
       i
       i
       i

    解题思路

    因为输入的数 n 要满足:n = 3 * k + 1 (k >= 1),所以这里以 7 个 x 为例,使用 - 代替空格,看起来更直观
    x---x
    -x-x
    --x
    --x
    --x
    这时 n = 7,得到 k = (7 - 1) / 3 = 2

    仔细观察可以得到如下规律
    对前 k 行来说:

    1. 每行是有两个数的
    2. 第 i 行的前面有 i 个空格
    3. 第 i 行的两个数直接有 (k - i) * 2 - 1 个空格

    对后 k 行来说:

    1. 每行只有一个数
    2. 每行前面都有 k 个空格

    代码

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            in.nextLine();    // 接收n后面的空行
            String str = in.nextLine();
            String[] arr = str.split("");
            // 计算出k,即上方两个字母的行数
            int k = (n - 1) / 3;
            int index = 0;
            // 计算Y型的总行数
            int line = k * 2 + 1;
            
            for (int i = 0; i < k; i++) {
                for (int j = 0; j < i; j++) {
                    System.out.print(" ");
                }
                System.out.print(arr[index++]);
                for (int j = 0; j < (k - i) * 2 - 1; j++) {
                    System.out.print(" ");
                }
                System.out.print(arr[index++]);
                System.out.println();
            }
            
            for (int i = k; i < line; i++) {
                for (int j = 0; j < k; j++) {
                    System.out.print(" ");
                }
                System.out.print(arr[index++]);
                System.out.println();
            }
        }
    }
    
  • 相关阅读:
    点击添加按钮添加一条记录,点击删除按钮删除本条记录
    两个input在一行让它们能对齐
    H5页面在微信中禁止下拉露出网页
    纯css实现隐藏滚动条仍可以滚动
    jQuery弹出层layer插件的使用
    flex组合流动布局实例---利用css的order属性改变盒子排列顺序
    媒体查询样式失效的解决办法
    menu-普通menu弹出框样式
    5lession-path路径相关操作
    do_pj--下拉代码脚本的使用
  • 原文地址:https://www.cnblogs.com/taiyii/p/13341028.html
Copyright © 2011-2022 走看看