• (一)ByteDance编程题


    题目:

    公司的程序员不够用了,决定把产品经理都转变为程序员以解决开发时间长的问题。

    在给定的矩形网格中,每个单元格可以有以下三个值之一:

    0代表空单元格

    1代表产品经理

    2代表程序员

    每分钟,任何与程序员(在4个正方向上)相邻的产品经理都会变成程序员。

    返回直到单元格中没有产品经理为止所必须经过的最小分钟数。

    如果不可能,返回-1.

    输入描述:

    不固定多行(行数<=10),每行是按照空格分割的数字(不固定,每行数字个数<=10

    其中每个数组项的取值仅为012三种

    (读取时可以按行读取,直到读取到空行为止,再对读取的所有行做转换处理)

    输出描述:

    如果能将所有产品经理变成程序员,则输出最小的分钟数。

    如果不能够将所有的产品经理变成程序员,则返回-1

            示例1

    输入:

    0 2

    1 0

    输出:

    -1

           示例2

    输入:

    1 2 1

    1 1 0

    0 1 1

    输出:

    3

           示例3

    输入:

    1 2

    2 1

    1 2

    0 1

    0 1

    1 1

    输出:

    4

    我的程序:

     1 import java.util.Scanner;
     2 
     3 public class Main {
     4     public static void main(String[] args){
     5         boolean flag=false;
     6         int sum=0;  //标记变化次数
     7         String a =null;
     8         Scanner in=new Scanner(System.in);
     9         String arr=in.nextLine();
    10         int p=arr.replace(" ","").length();
    11         while(in.hasNextLine()){  //如果下行不为空行
    12             a=in.nextLine();   //a继续接收当前行
    13             if(a.length() == 0){  //如果a串为回车符,则跳出循环
    14                 break;
    15             }
    16             arr+=a;    //把输入的数字存储到一个字符串arr中
    17         }
    18 
    19         //将空格去掉
    20         arr=arr.replace(" ","");
    21 
    22         //把字符串arr存到字符数组array中
    23         char []array=arr.toCharArray();
    24 
    25         //判断字符串arr中1的前后3、1个位置是否为2,其中排除掉左边的数,
    26         // 无前1,右边的数,无后1,左边的数为能被列数整除,右边的数即为(当前位置+1)能被列数整除
    27         while(true){
    28             flag=false;
    29             for(int i=0;i<arr.length();i++){
    30                 if(arr.charAt(i)=='1'){
    31                     if((i+1)%p==0){  //除去与后一号比较的情况
    32                         if( (i-p)>=0 ){
    33                             if(arr.charAt(i-p)=='2'){
    34                                 array[i]='2';    //把字符数组array中的该位置的1变为2
    35                                 flag=true;
    36                             }
    37                         }
    38                         if((i+3)<arr.length()){
    39                             if(arr.charAt(i+p)=='2'){
    40                                 array[i]='2';    //把字符数组array中的该位置的1变为2
    41                                 flag=true;
    42                              }
    43                         }
    44                         if((i-1)>=0){
    45                             if(arr.charAt(i-1)=='2'){
    46                                 array[i]='2';    //把字符数组array中的该位置的1变为2
    47                                 flag=true;
    48                             }
    49                         }
    50                     }else {
    51                         if( (i-p)>=0 ){
    52                             if(arr.charAt(i-p)=='2'){
    53                                 array[i]='2';    //把字符数组array中的该位置的1变为2
    54                                 flag=true;
    55                             }
    56                         }
    57                         if((i+3)<arr.length()){
    58                             if(arr.charAt(i+p)=='2'){
    59                                 array[i]='2';    //把字符数组array中的该位置的1变为2
    60                                 flag=true;
    61                             }
    62                         }
    63                         if((i+1)<arr.length()){
    64                             if(arr.charAt(i+1)=='2'){
    65                                 array[i]='2';    //把字符数组array中的该位置的1变为2
    66                                 flag=true;
    67                             }
    68                         }
    69                         if(i%p==0){  //除去与前一号比较的情况
    70                             continue;
    71                         }
    72                         if((i-1)>=0){
    73                             if(arr.charAt(i-1)=='2'){
    74                                 array[i]='2';    //把字符数组array中的该位置的1变为2
    75                                 flag=true;
    76                             }
    77                         }
    78                     }
    79                 }
    80             }
    81             if(flag){
    82                 sum++;   //有1发生变化,sum加一次
    83             }else {
    84                 break;
    85             }
    86             //把数组array赋值给arr
    87             arr=new String(array);
    88         }
    89         if(sum!=0){
    90             System.out.println(sum);
    91         }else {
    92             System.out.println(-1);
    93         }
    94     }
    95 }
  • 相关阅读:
    Dapper数据库字段和model属性映射
    SQLServer性能调优之缓存
    python&django 实现页面中关联查询小功能(基础篇)
    pythonのdjango select_related 和 prefetch_related()
    pythonのdjango 在控制台用log打印操作日志
    pythonのdjango Form简单应用。
    pythonのdjango 信号
    pythonのdjango 缓存
    pythonのdjango CSRF简单使用
    pythonのdjango Session体验
  • 原文地址:https://www.cnblogs.com/tendo/p/10717009.html
Copyright © 2020-2023  润新知