zoukankan      html  css  js  c++  java
  • (一)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 }
  • 相关阅读:
    【数学】三分法
    【数学】【背包】【NOIP2018】P5020 货币系统
    【数学】【CF27E】 Number With The Given Amount Of Divisors
    【单调队列】【P3957】 跳房子
    【极值问题】【CF33C】 Wonderful Randomized Sum
    【DP】【CF31E】 TV Game
    【神仙题】【CF28D】 Don't fear, DravDe is kind
    【线段树】【CF19D】 Points
    【字符串】KMP字符串匹配
    【二维树状数组】【CF10D】 LCIS
  • 原文地址:https://www.cnblogs.com/tendo/p/10717009.html
Copyright © 2011-2022 走看看